W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
過去一天沒有接上上章的東西,今天繼續(xù)啊!
首先還是要先把上次的代碼拿上來。
void PaintedWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawLine(80, 100, 650, 500);
painter.setPen(Qt::red);
painter.drawRect(10, 10, 100, 400);
painter.setPen(QPen(Qt::green, 5));
painter.setBrush(Qt::blue);
painter.drawEllipse(50, 150, 400, 200);
}
上次我們說的是 Qt 繪圖相關(guān)的架構(gòu),以及 QPainter 的建立和 drawXXXX 函數(shù)??梢钥吹剑旧洗a中已經(jīng)設(shè)計到得函數(shù)還剩下兩個:setPen()和 setBrush()?,F(xiàn)在,我們就要把這兩個函數(shù)講解一下。
Qt 繪圖系統(tǒng)提供了三個主要的參數(shù)設(shè)置,畫筆(pen)、畫刷(brush)和字體(font)。這里我們要說明的是畫筆和畫刷。
所謂畫筆,是用于繪制線的,比如線段、輪廓線等,都需要使用畫筆繪制。畫筆類即 QPen,可以設(shè)置畫筆的樣式,例如虛線、實現(xiàn)之類,畫筆的顏色,畫筆的轉(zhuǎn)折點樣式等。畫筆的樣式可以在創(chuàng)建時指定,也可以由 setStyle()函數(shù)指定。畫筆支持三種主要的樣式:筆帽(cap),結(jié)合點(join)和線形 (line)。這些樣式具體顯示如下(圖片來自 C++ GUI Programming with Qt4, 2nd Edition):
上圖共分成三行:第一行是 Cap 樣式,第二行是 Join 樣式,第三行是 Line 樣式。QPen 允許你使用 setCapStyle()、setJoinStyle()和 setStyle()分別進行設(shè)置。具體請參加 API 文檔。
所謂畫刷,主要用來填充封閉的幾何圖形。畫刷主要有兩個參數(shù)可供設(shè)置:顏色和樣式。當(dāng)然,你也可以使用紋理或者漸變色來填充圖形。請看下面的圖片(圖片出自 Qt API 文檔):
這里給出了不同 style 的畫刷的表現(xiàn)。同畫筆類似,這些樣式也可用通過一個 enum 進行設(shè)置。
明白了這些之后我們再來看看我們的代碼。首先,我們直接使用 drawLine()函數(shù),由于沒有設(shè)置任何樣式,所以使用的是默認的1px,,黑色,solid 樣式畫了一條直線;然后使用 setPen()函數(shù),將畫筆設(shè)置成 Qt::red,即紅色,畫了一個矩形;最后將畫筆設(shè)置成綠色,5px,畫刷設(shè)置成藍色,畫了一個橢圓。這樣便顯示出了我們最終的樣式:
另外要說明一點,請注意我們的繪制順序,首先是直線,然后是矩形,最后是橢圓。這樣,因為橢圓是最后畫的,因此在最上方。
在我們學(xué)習(xí) OpenGL 的時候,肯定聽過這么一句話:OpenGL 是一個狀態(tài)機。所謂狀態(tài)機,就是說,OpenGL 保存的只是各種狀態(tài)。怎么理解呢?比如,你把顏色設(shè)置成紅色,那么,直到你重新設(shè)置另外的顏色,它的顏色會一直是紅色。QPainter 也是這樣,它的狀態(tài)不會自己恢復(fù),除非你使用了各種 set函數(shù)。因此,如果在上面的代碼中,我們在橢圓繪制之后再畫一個橢圓,它的樣式還會是綠色5px 的輪廓和藍色的填充,除非你顯式地調(diào)用了 set 進行更新。這可能是繪圖系統(tǒng)較多的實現(xiàn)方式,因為無論是OpenGL、QPainter 還是 Java2D,都是這樣實現(xiàn)的(DirectX 不大清楚)。
本文出自 “豆子空間” 博客,請務(wù)必保留此出處 http://devbean.blog.51cto.com/448512/194031
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: