国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Qt—QPainter基本圖形繪制詳解

這篇具有很好參考價(jià)值的文章主要介紹了Qt—QPainter基本圖形繪制詳解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

QPainter描述

1、QPainter 類在小部件和其他繪制設(shè)備上執(zhí)行低級(jí)繪制。

2、QPainter 提供了高度優(yōu)化的功能來(lái)完成大多數(shù)圖形GUI程序所需的工作。它可以畫從簡(jiǎn)單的線條到復(fù)雜的形狀。它還可以繪制對(duì)齊的文本和像素圖。QPainter 可以對(duì)繼承 QPaintDevice 類的任何對(duì)象進(jìn)行操作。

3、QPainter 與 QPaintDevice 和 QPaintEngine 類一起構(gòu)成了Qt繪制系統(tǒng)的基礎(chǔ):

  • QPainter 是用于執(zhí)行繪圖操作的類。

  • QPaintDevice 表示可以使用 QPainter 在其上繪制的設(shè)備。

  • QPaintEngine 提供了一個(gè)接口,QPainter 可以使用這個(gè)接口來(lái)繪制不同類型的設(shè)備。

項(xiàng)目示例

在右邊可以選擇繪圖樣式,左邊顯示對(duì)應(yīng)的樣式效果

qpainter,QT,C/C++,qt,開(kāi)發(fā)語(yǔ)言,c++,windows,Powered by 金山文檔
qpainter,QT,C/C++,qt,開(kāi)發(fā)語(yǔ)言,c++,windows,Powered by 金山文檔

繪圖區(qū)

新建類PaintArea,基類QWidget,作為繪制圖形區(qū)域。其成員有:

m_shape用于記錄繪圖樣式,例如繪制線或者繪制矩形;m_pen用于記錄畫筆樣式;m_brush用于記錄畫刷樣式,m_fillrule用于記錄填充規(guī)則。

當(dāng)左端控制區(qū)發(fā)生樣式改變時(shí),將對(duì)應(yīng)的樣式屬性傳遞給PaintArea類對(duì)應(yīng)的成員,然后調(diào)用update( )方法重繪窗體來(lái)實(shí)現(xiàn)繪圖區(qū)樣式的改變。這就需要我們重寫printEvent( )方法,來(lái)實(shí)現(xiàn)繪制自己需要的圖形。

PaintArea類構(gòu)造函數(shù)中,設(shè)置背景顏色為白色,以及固定大小

控制區(qū)樣式改變時(shí),將對(duì)應(yīng)的樣式屬性傳遞給PaintArea類的對(duì)應(yīng)成員

重寫paintEvent( )方法,在函數(shù)中根據(jù)m_shape圖片類型調(diào)用對(duì)應(yīng)的繪圖函數(shù)。

qpainter,QT,C/C++,qt,開(kāi)發(fā)語(yǔ)言,c++,windows,Powered by 金山文檔

控制區(qū)

控制區(qū)就是我們的主窗口類,類名為MainWidget,基類QWidget。將上面我們自定義的PaintArea類作為主窗口類的成員,成員名為m_paintArea。

畫筆顏色

當(dāng)點(diǎn)擊"更改"按鈕時(shí)彈出一個(gè)顏色對(duì)話框,將用戶選擇的顏色顯示在中間QFrame部件中,同時(shí)更改繪圖區(qū)邊框顏色

qpainter,QT,C/C++,qt,開(kāi)發(fā)語(yǔ)言,c++,windows,Powered by 金山文檔

在初始化函數(shù)中初始化QFrame的顏色,以及按鈕的槽方法連接。tr可以使該顯示的文本能夠被翻譯。

ShowPenColor( )槽方法

在該槽方法中,我們首先獲得QFrame部件的顏色,作為打開(kāi)顏色對(duì)話框時(shí)的初始顏色,接著從其他樣式選項(xiàng)框中獲取和畫筆樣式有關(guān)的值。調(diào)用PaintArea類的setPen( ) 方法設(shè)置畫筆樣式。

  • 獲得部件顏色:QColor color = 部件名稱->palette( ).color(QPalette : :Window);參數(shù)QPalette::Window表示獲得該部件的窗體顏色

  • 獲得組合框選中的值:首先調(diào)用組合框的currentIndex( )方法獲得組合框當(dāng)前選中值的索引,再調(diào)用組合框的itemData(int index).toInt( ),傳入索引,并且將返回值轉(zhuǎn)換成int類型,再?gòu)?qiáng)轉(zhuǎn)成對(duì)應(yīng)的樣式枚舉值。

繪制形狀

形狀選取是一個(gè)組合框部件,在初始換函數(shù)中將可選取的值添加到組合框中.

qpainter,QT,C/C++,qt,開(kāi)發(fā)語(yǔ)言,c++,windows,Powered by 金山文檔

在初始化函數(shù)中,向組合框添加形狀條目,這里我們又將能繪制的形狀單獨(dú)在PaintArea類中用枚舉類型聲明了一下

ShowShape(int)槽方法

在該槽方法中,我們獲取形狀組合框選取的值,再調(diào)用PaintArea類的setShape( )方法設(shè)置形狀.

線寬

設(shè)置線寬我們采用一個(gè)QSpinBox部件來(lái)實(shí)現(xiàn),設(shè)置取值范圍為1到20。

qpainter,QT,C/C++,qt,開(kāi)發(fā)語(yǔ)言,c++,windows,Powered by 金山文檔

初始化函數(shù)

ShowPenWidth( int)槽方法

槽方法可以直接獲取到更改的筆寬值

畫筆風(fēng)格

畫筆風(fēng)格的選擇是一個(gè)組合框,我們可以選擇不同的風(fēng)格,例如實(shí)線(SolidLine)、點(diǎn)線(DotLine)或者其他樣式,也可以選擇自定義的DashLine。

qpainter,QT,C/C++,qt,開(kāi)發(fā)語(yǔ)言,c++,windows,Powered by 金山文檔

不同的畫筆風(fēng)格對(duì)應(yīng)的效果大致如下

qpainter,QT,C/C++,qt,開(kāi)發(fā)語(yǔ)言,c++,windows,Powered by 金山文檔

畫筆風(fēng)格的實(shí)現(xiàn)代碼與畫筆顏色大致相同:首先在初始化函數(shù)中向組合框添加可選項(xiàng),再將組合框的信號(hào)與槽方法連接。在槽方法中需要注意的是需要設(shè)置自定義的DashLine的樣式。

初始化函數(shù)

ShowPenStyle(int)槽方法

在槽方法中需要設(shè)置自定義的DashLine樣式

筆帽風(fēng)格

qpainter,QT,C/C++,qt,開(kāi)發(fā)語(yǔ)言,c++,windows,Powered by 金山文檔

不同的筆帽風(fēng)格對(duì)應(yīng)的樣式如下

qpainter,QT,C/C++,qt,開(kāi)發(fā)語(yǔ)言,c++,windows,Powered by 金山文檔

釋義:

  • Qt::SquareCap 方形線端,不覆蓋線的端點(diǎn)

  • Qt::FlatCap 方形線端,覆蓋線的端點(diǎn),并以線框一半向外延伸

  • Qt::RoundCap 圓線端

初始化函數(shù)

ShowPenStyle(int)槽方法

連接點(diǎn)樣式

qpainter,QT,C/C++,qt,開(kāi)發(fā)語(yǔ)言,c++,windows,Powered by 金山文檔

不同的連接點(diǎn)樣式對(duì)應(yīng)的效果如下

qpainter,QT,C/C++,qt,開(kāi)發(fā)語(yǔ)言,c++,windows,Powered by 金山文檔

釋義:

  • Qt::BevelJoin 兩條線相匯形成方形連接

  • Qt::MiterJoin 兩條線相匯形成尖角連接

  • Qt::RoundJoin兩條線相匯形成圓角連接

初始化函數(shù)

ShowPenJoin(int)槽方法

填充模式

qpainter,QT,C/C++,qt,開(kāi)發(fā)語(yǔ)言,c++,windows,Powered by 金山文檔

不同的填充模式對(duì)應(yīng)的效果如下

qpainter,QT,C/C++,qt,開(kāi)發(fā)語(yǔ)言,c++,windows,Powered by 金山文檔
qpainter,QT,C/C++,qt,開(kāi)發(fā)語(yǔ)言,c++,windows,Powered by 金山文檔

Qt::OddEvenFill填充規(guī)則:從圖形中某一點(diǎn)畫一條水平線到圖形外,若這條線與圖形邊線的交點(diǎn)為奇數(shù)則說(shuō)明此點(diǎn)位于圖形的內(nèi)部;若交點(diǎn)為偶數(shù),則此點(diǎn)在圖形的外部。

Qt::WindingFill填充規(guī)則:從圖形總某一點(diǎn)畫一條水平線到圖形外,每個(gè)交點(diǎn)外邊線方向可能向上、向下、方向相反的相互抵消,若結(jié)果不為0表此點(diǎn)在圖形內(nèi),若為0則在圖形外。其中邊線的方向是由QPainterPath創(chuàng)建時(shí)根據(jù)描述的順序決定的,如果采用addRect()或addPolygon()等函數(shù)加入的圖形默認(rèn)為順時(shí)針?lè)较颉?/p>

初始化函數(shù)

ShowFileRule(int)槽方法

鋪展效果

不同的鋪展樣式效果如下

qpainter,QT,C/C++,qt,開(kāi)發(fā)語(yǔ)言,c++,windows,Powered by 金山文檔

初始化函數(shù)

ShowSpread(int)槽方法

m_brushSpread是一個(gè)QGradient : :Spread類型,用來(lái)記錄選擇的鋪展效果。之后調(diào)用ShowBrushStyle( int )槽方法來(lái)改變樣式效果

畫刷風(fēng)格

qpainter,QT,C/C++,qt,開(kāi)發(fā)語(yǔ)言,c++,windows,Powered by 金山文檔

不同的畫刷風(fēng)格效果如下

qpainter,QT,C/C++,qt,開(kāi)發(fā)語(yǔ)言,c++,windows,Powered by 金山文檔

初始化函數(shù)

ShowBrushStyle(int)槽方法

畫刷風(fēng)格中有幾種樣式需要特別設(shè)置參數(shù),例如QLineGradient就需要設(shè)置漸變區(qū)域和漸變色

追風(fēng)趕月莫停留,平蕪盡處是春山!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-783690.html

到了這里,關(guān)于Qt—QPainter基本圖形繪制詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包