Qt繪圖

  • Qt繪圖的設置

1 QPainter::Antialiasing // 反鋸齒
2 QPainter::TextAntialiasing // 文字反鋸齒
3 QPainter::SmoothPixmapTransform   // 採用平滑的Pixmap變換算法
設置
1 painter.setRenderHint(QPainter::Antialiasing, true);

 

  • 瞭解Qt繪圖函數

 

繪圖方法在上圖已經很是清晰的展現了,方法參數也很簡單,使用時一看便知。html

 

  • Qt畫筆風格 

 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。讓咱們今後告別造輪子,專一業務需求自己。

QCustomPlot官網

QCustomPlot使用教程

QT5使用QCustomPlot繪製實時曲線

QCustomPlot使用分享

相關文章
相關標籤/搜索