1 QPainter::Antialiasing // 反鋸齒 2 QPainter::TextAntialiasing // 文字反鋸齒 3 QPainter::SmoothPixmapTransform // 採用平滑的Pixmap變換算法
設置
1 painter.setRenderHint(QPainter::Antialiasing, true);
繪圖方法在上圖已經很是清晰的展現了,方法參數也很簡單,使用時一看便知。html
1)畫刷風格算法
2)畫筆風格函數
3)鏈接點風格this
4)頂端風格spa
建立一個自定義的Widget:.net
// widget.h #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QPaintEvent> class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = 0); ~Widget(); protected: // 重寫基類的繪製方法 void paintEvent(QPaintEvent *); }; #endif // WIDGET_H
實現Widget:3d
// widget.cpp #include "widget.h" #include <QPainter> #include <QPoint> Widget::Widget(QWidget *parent) : QWidget(parent) {} Widget::~Widget() {} void Widget::paintEvent(QPaintEvent *event) { // TODO: 在這裏進行繪製 }
程序入口Main:code
1 // main.cpp 2 3 #include "widget.h" 4 #include <QApplication> 5 6 int main(int argc, char *argv[]) 7 { 8 QApplication a(argc, argv); 9 Widget w; 10 w.show(); 11 12 return a.exec(); 13 }
好了,準備工做完成了。後面的繪製工做都會發生在 paintEvent 這個方法內。orm
1 void Widget::paintEvent(QPaintEvent *event) 2 { 3 Q_UNUSED(event) 4 5 // this 表示在Widget部件內部繪製 6 QPainter painter(this); 7 8 // 使用畫筆,參數爲:畫刷,線寬,畫筆風格,畫筆端點,畫筆鏈接風格 9 QPen pen(Qt::green, 5, Qt::DotLine, Qt::RoundCap, Qt::RoundJoin); 10 painter.setPen(pen); 11 12 // 使用畫筆畫線 13 painter.drawLine(QPoint(0, 0), QPoint(100, 100)); 14 15 // 畫矩形,參數:x,y,w,h 16 painter.drawRect(110, 110, 100, 80); 17 18 // 繪製橢圓(圓),參數:x,y,w,h 19 painter.drawEllipse(20, 20, 100, 80); 20 21 // 繪製圓弧 22 { 23 QRectF rect(110.0, 80.0, 100.0, 80.0); //x,y,w,h 24 int startAngle = 30 * 16; //值爲,實際角度 * 16 25 int spanAngle = 120 * 16; 26 painter.drawArc(rect, startAngle, spanAngle); // 參數:rect表示弧線所在的矩形,startAngle起始角度,spanAngle跨越角度 27 } 28 29 // 繪製扇形 30 { 31 QRectF rect_top(120.0, 20.0, 100.0, 100.0); 32 int startAngle = 0 * 16; // 扇形起始角度 33 int spanAngle = 120 * 16; // 扇形覆蓋範圍(120度的) 34 painter.drawPie(rect_top, startAngle, spanAngle); 35 } 36 37 // 繪製多邊形 38 { 39 QPolygon pts; 40 pts.setPoints(3, 250,20, 300,80, 280,130); //第一個參數表示3個點,後面是三個點座標 41 painter.drawConvexPolygon(pts); 42 } 43 44 // 繪製路徑 45 { 46 QPainterPath path; 47 path.addEllipse(400, 100, 80, 80);//添加一個圓 48 path.addRect(400, 130, 100, 100); //添加一個矩形 49 50 // 使用筆刷,設置顏色和填充模式 51 QBrush brush(QColor(0,0,255), Qt::Dense4Pattern); 52 painter.setBrush(brush); 53 path.setFillRule(Qt::WindingFill); // 非零彎曲規則;此外還有 Qt::OddEventFil 奇偶填充規則 54 55 painter.drawPath(path); 56 } 57 }
註釋很詳細了,就再也不進行說明,運行的效果以下圖所示。htm
若是你以爲這樣一點一點的繪製太慢,寫代碼的效率過低,那麼推薦你試試這個第三方控件:QCustomPlot。讓咱們今後告別造輪子,專一業務需求自己。