程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> Qt學習之路(25):QPainter(續)

Qt學習之路(25):QPainter(續)

編輯:關於C++

首先還是要先把上次的代碼拿上來。

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繪圖相關的架構,以及QPainter的建立和drawXXXX函數。可以看到,基本上代碼中已經設計到得函數還剩下兩個:setPen()和setBrush()。現在,我們就要把這兩個函數講解一下。

Qt繪圖系統提供了三個主要的參數設置,畫筆(pen)、畫刷(brush)和字體(font)。這裡我們要說明的是畫筆和畫刷。

所謂畫筆,是用於繪制線的,比如線段、輪廓線等,都需要使用畫筆繪制。畫筆類即QPen,可以設置畫筆的樣式,例如虛線、實現之類,畫筆的顏色,畫筆的轉折點樣式等。畫筆的樣式可以在創建時指定,也可以由setStyle()函數指定。畫筆支持三種主要的樣式:筆帽(cap),結合點 (join)和線形 (line)。這些樣式具體顯示如下(圖片來自C++ GUI Programming with Qt4, 2nd Edition):

上圖共分成三行:第一行是Cap樣式,第二行是Join樣式,第三行是Line樣式。QPen允許你使用setCapStyle()、setJoinStyle()和setStyle()分別進行設置。具體請參加API文檔。

所謂畫刷,主要用來填充封閉的幾何圖形。畫刷主要有兩個參數可供設置:顏色和樣式。當然,你也可以使用紋理或者漸變色來填充圖形。請看下面的圖片(圖片出自Qt API 文檔):

這裡給出了不同style的畫刷的表現。同畫筆類似,這些樣式也可用通過一個enum進行設置。

明白了這些之後我們再來看看我們的代碼。首先,我們直接使用drawLine()函數,由於沒有設置任何樣式,所以使用的是默認的1px,,黑色,solid樣式畫了一條直線;然後使用setPen()函數,將畫筆設置成Qt::red,即紅色,畫了一個矩形;最後將畫筆設置成綠色,5px,畫刷設置成藍色,畫了一個橢圓。這樣便顯示出了我們最終的樣式:

另外要說明一點,請注意我們的繪制順序,首先是直線,然後是矩形,最後是橢圓。這樣,因為橢圓是最後畫的,因此在最上方。

在我們學習OpenGL的時候,肯定聽過這麼一句話:OpenGL是一個狀態機。所謂狀態機,就是說,OpenGL保存的只是各種狀態。怎麼理解呢?比如,你把顏色設置成紅色,那麼,直到你重新設置另外的顏色,它的顏色會一直是紅色。QPainter也是這樣,它的狀態不會自己恢復,除非你使用了各種set函數。因此,如果在上面的代碼中,我們在橢圓繪制之後再畫一個橢圓,它的樣式還會是綠色5px的輪廓和藍色的填充,除非你顯式地調用了set 進行更新。這可能是繪圖系統較多的實現方式,因為無論是OpenGL、QPainter還是Java2D,都是這樣實現的(DirectX不大清楚)。

出處:http://devbean.blog.51cto.com/448512/235851

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved