【Qt】2D绘图之绘制路径
00. 目錄
文章目錄
- 00. 目錄
- 01. 概述
- 02. 開發環境
- 03. 繪制簡單路徑
- 04. 復制圖形路徑
- 05. 位置問題探討
- 06. 附錄
01. 概述
如果要繪制一個復雜的圖形,尤其是要重復繪制這樣的圖形,那么可以使用QPainterPath類,然后使用QPainter::drawPath()來進行繪制。QPainterPath類為繪制操作提供了一個容器,可以用來創建圖形并且重復使用。一個繪圖路徑就是由多個矩形、橢圓、線條或者曲線等組成的對象,一個路徑可以是封閉的,例如矩形和橢圓;也可以是非封閉的,例如線條和曲線。
02. 開發環境
Windows系統:Windows10
Qt版本:Qt5.15或者Qt6
03. 繪制簡單路徑
程序示例
void Widget::paintEvent(QPaintEvent *) {QPainter painter(this);QPainterPath path;//繪制圓形path.addEllipse(100, 100, 50, 50);//繪制直線path.moveTo(100, 100);path.lineTo(200, 200);painter.setPen(Qt::green);painter.setBrush(Qt::red);//繪制路徑painter.drawPath(path); }當創建一個QPainterPath對象后,可以使用lineTo()、arcTo()、cubicTo()和quadTo()等函數將直線或者曲線添加到路徑中。運行程序,效果如下圖所示。
04. 復制圖形路徑
如果只是簡單的將幾個圖形拼接在一起,其實完全沒有必要用路徑,之所以要引入路徑,就是因為它的一個非常有用的功能:復制圖形路徑。
程序示例:
void Widget::paintEvent(QPaintEvent *) {QPainter painter(this);QPainterPath path;//繪制圓形path.addEllipse(100, 100, 50, 50);//繪制直線path.moveTo(100, 100);path.lineTo(200, 200);painter.setPen(Qt::green);painter.setBrush(Qt::red);//繪制路徑painter.drawPath(path);QPainterPath path2;path2.addPath(path);path2.translate(100, 100);painter.drawPath(path2); }執行結果:
對于已經繪制好的路徑,可以非常簡單地進行重復繪制。
05. 位置問題探討
程序示例一:
void Widget::paintEvent(QPaintEvent *) {QPainterPath path;path.lineTo(100, 100);path.lineTo(200, 100);QPainter painter(this);painter.drawPath(path);}可以看到,創建路徑后,默認是從(0, 0)點開始繪制的,當繪制完第一條直線后當前位置是(100, 100)點,從這里開始繪制第二條直線。繪制完第二條直線后,當前位置是(200, 100)。
執行結果:
程序示例二:
void Widget::paintEvent(QPaintEvent *) {QPainterPath path;path.addRect(50, 50, 40, 40);path.lineTo(0, 0);QPainter painter(this);painter.setPen(QColor(Qt::red));painter.drawPath(path);}執行結果:
當繪制完矩形后,當前位置在矩形的左上角頂點,然后從這里開始繪制后面的直線。
程序示例三:
void Widget::paintEvent(QPaintEvent *) {QPainterPath path;path.addRect(50, 50, 40, 40);//改變當前位置為(100, 100)path.moveTo(100, 100);path.lineTo(0, 0);QPainter painter(this);painter.setPen(QColor(Qt::red));painter.drawPath(path);}執行結果:
06. 附錄
源碼下載:【Qt】2D繪圖之繪制路徑.rar
總結
以上是生活随笔為你收集整理的【Qt】2D绘图之绘制路径的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Qt】2D绘图之绘制文字
- 下一篇: 【Qt】2D绘图之填充规则