日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Qt】2D绘图之绘制路径

發布時間:2024/4/24 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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绘图之绘制路径的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。