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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

[Qt教程] 第14篇 2D绘图(四)绘制路径

發布時間:2024/4/20 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Qt教程] 第14篇 2D绘图(四)绘制路径 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[Qt教程]?第14篇 2D繪圖(四)繪制路徑

樓主?發表于 2013-4-27 12:40:52?|?查看: 611|?回復: 0
繪制路徑
版權聲明
該文章原創于Qter開源社區(www.qter.org),作者yafeilinux,轉載請注明出處!


導語
如果要繪制一個復雜的圖形,尤其是要重復繪制這樣的圖形,那么可以使用QPainterPath類,然后使用QPainter::drawPath()來進行繪制。QPainterPath類為繪制操作提供了一個容器,可以用來創建圖形并且重復使用。一個繪圖路徑就是由多個矩形、橢圓、線條或者曲線等組成的對象,一個路徑可以是封閉的,例如矩形和橢圓;也可以是非封閉的,例如線條和曲線。


環境:Windows Xp + Qt 4.8.4+QtCreator 2.6.2


目錄
一、簡單的使用路徑二、復制圖形三、繪制圖形時的當前位置



正文

一、簡單的使用路徑
依然在前面的項目中進行講解。更改paintEvent()函數如下:void?MainWindow::paintEvent(QPaintEvent?*){? ??QPainterPath?path;? ??path.addEllipse(100,?100,?50,?50);? ??path.lineTo(200,?200);? ??QPainter?painter(this);? ??painter.setPen(Qt::blue);? ??painter.setBrush(Qt::red);? ??painter.drawPath(path);}
當創建一個QPainterPath對象后,可以使用lineTo()arcTo()cubicTo()quadTo()等函數將直線或者曲線添加到路徑中。運行程序,效果如下圖所示。


二、復制圖形
如果只是簡單的將幾個圖形拼接在一起,其實完全沒有必要用路徑,之所以要引入路徑,就是因為它的一個非常有用的功能:復制圖形路徑。我們在painEvent()函數中繼續添加下面幾行代碼:QPainterPath?path2;path2.addPath(path);path2.translate(100,0);painter.drawPath(path2);? ??現在運行程序,效果如下圖所示。

可以看到,對于已經繪制好的路徑,可以非常簡單的進行重復繪制。


三、繪制圖形時的當前位置
1.我們先來看個例子,將paintEvent()函數更改如下:
void?MainWindow::paintEvent(QPaintEvent?*){? ??QPainterPath?path;? ??path.lineTo(100,100);? ??path.lineTo(200,100);? ??QPainter?painter(this);? ??painter.drawPath(path);}程序運行效果如下圖所示。
可以看到,創建路徑后,默認是從(0, 0)點開始繪制的,當繪制完第一條直線后當前位置是(100, 100)點,從這里開始繪制第二條直線。繪制完第二條直線后,當前位置是(200,100)

2.再來看一個例子。將paintEvent()函數的內容更改如下:void?MainWindow::paintEvent(QPaintEvent?*){? ??QPainterPath?path;? ??path.addRect(50,?50,?40,?40);? ??path.lineTo(200,?200);? ??QPainter?painter(this);? ??painter.drawPath(path);}運行程序,效果如下圖所示。
可以發現,當繪制完矩形后,當前位置在矩形的左上角頂點,然后從這里開始繪制后面的直線。

4.我們也可以使用moveTo()函數來改變當前點的位置。例如將上面的代碼更改為:
void?MainWindow::paintEvent(QPaintEvent?*){? ??QPainterPath?path;? ??path.addRect(50,?50,?40,?40);? ??//移動到(100, 100)點? ??path.moveTo(100,?100);? ??path.lineTo(200,?200);? ??QPainter?painter(this);? ??painter.drawPath(path);}
這樣當繪制完矩形以后,就會移動到(100, 100)點進行后面的繪制。程序運行效果如下圖所示。


結語
這里只講解了QPainterPath最基本的應用,使用好這個類可以繪制出很多特效圖形。如果繪制的兩個圖形有交集,那么還要涉及到相交部分的填充規則問題,這部分內容可以參考《Qt Creator快速入門》10章的相關內容。





涉及到的源碼下載:??painter_1.zip?(2.11 KB, 下載次數: 5)?

總結

以上是生活随笔為你收集整理的[Qt教程] 第14篇 2D绘图(四)绘制路径的全部內容,希望文章能夠幫你解決所遇到的問題。

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