首頁>技術>

Qt本身提供給我們豐富的控制元件資源,然而它原生態的UI外觀卻並不是很美觀,所以在應用程式當中經常需要去定製控制元件以及視窗的外觀。下面就來聊聊關於Qt Widget控制元件外觀的自繪吧。Qt的圖形繪製分為2D圖形和3D圖形,本篇章主要介紹2D繪圖。

Qt控制元件外觀的定製,一般有兩種方法。簡單一點的,可以透過樣式表setStyleSheet來實現,這種方式比較適合初學者,簡單的定義就可以得到大部分應用程式所需要的UI外觀介面。如果你曾經去研究過Qt的原始碼,就會發現,Qt控制元件本身的自繪,基本上都是基於Qstyle子類drawPrimitive來實現的。如果我們想將外觀做的複雜點,更具有獨特性,有時候即使用上qss, 也還是無法實現,這個時候就需要用到Widget控制元件外觀的自繪。在講Qt基礎學習影片中,我並沒有重點講解自繪,其原因就是因為對於初學者,它具有一定的難度,還有就是自繪控制元件前,我們需要了解控制元件本身的特性,只有當我們基本上熟悉了Qt的控制元件,你自繪控制元件外觀才能真正入門。

所謂Qt控制元件自繪,就是在paintEvent事件中去完成一系列的繪圖,我們可以在paintEvent中取得控制元件的畫布,得到畫布的大小,然後用我們的手,拿起筆或者是刷子,繪製出想要的圖案。也許大家覺得我說的太簡單了,但自繪控制元件確實就是如此,當你真正瞭解了控制元件本身的特性,熟悉了畫筆、畫刷的知識後,你一定也可以從容的定製控制元件你特有的控制元件。下面就來說說關於自繪控制元件需要掌握的基本知識吧。

QPainter類:

Qt中提供了強大的2D繪圖系統,可以使用它的API在螢幕和繪圖裝置上進行繪製,它主要基於QPainter、QPaintDevice和QPaintEngine這三個類。一般我們只需要去學習QPainter類,它主要用於繪製一些基本圖形元素(點、直線、圓形、矩形、曲線、文字,圖片)。我們只需要在函式paintEvent中自繪前,去定義它的變數就可以使用。

大家看是不是特別簡單,定義一個繪圖的筆QPainter,我們很快就畫出了一個簡單的漸變矩形。當然,知道了繪圖類之後,接下來就需要重點了解QPainter繪圖3個主要的屬性:

1) pen屬性:是一個QPen物件,用於控制線條的顏色、寬度、線型

2) brush屬性 :是一個QBrush物件,用於一個區域的填充特性,可以設定填充顏色、填充方式、漸變特性等

3) font屬性:是一個QFont物件,用於繪製顏色的時候,設定文字的字型樣式、大小屬性

當然它還有疊加 旋轉和縮放等其它特性,由於篇幅原因,這裡就不多做敘述了。

QPen類:

QPen用於繪圖時對線條的設定,主要包括線寬,顏色,線型等,QPen類的主要介面函式,通常一個設定函式都有一個對應的讀取函式。透過Qpen,我們可以很輕鬆的設定QPainter畫筆的顏色,線條粗細。

setColor(QColor &color)

設定畫筆顏色 線條顏色

setWidth(int width)

設定線條寬度

setStyle(Qt::PenStyle style)

設定線條樣式

例如當我們繪製控制元件的外邊框,就可以利用QPen如下實現。

::paintEvent(QPaintEvent *e)

{

QPainter painter(this)//繪製與繪圖裝置關聯的QPainter物件

Qpen pen; //定義畫筆

pen.setColor(Qcolor(255,0,0)); //設定紅色畫筆

  painter.setPen(pen); //關聯畫筆

//painter在裝置的視窗上繪製邊框

painter.drawRect();

}

QBrush類:

QBrush 用於繪圖時填充特性:填充顏色(甚至是漸變色)、填充樣式、材質填充時的材質圖片,我們可以把它當著一把刷子,定義Qbrush的顏色就好比將刷子浸上不同的顏料,如果我們同樣呼叫painter.drawRect(),那麼就是填充這塊區域。也就是說,畫刷就是一個實心的區域,畫筆就是外邊框。它的用法幾乎和Qpen一樣。

::paintEvent(QPaintEvent *e)

{

QPainter painter(this)//繪製與繪圖裝置關聯的QPainter物件

        QBrush brush = QBrush(QColor(0,0,255)); //定義藍色畫刷

painter.setPen(Qt::NoPen); //設定關聯空畫筆

painter.setBrush(brush); //設定關聯畫刷

//painter在裝置的視窗上繪製邊框

painter.drawRect();

}

QFont類:

QFont用於繪圖文字時,設定文字的字型名稱(family),字型的大小,我們只需要利用“painter.setFont”把Qfont的變數設定到Qpainter中就可以使用。這裡要提醒初學者,字型的顏色設定並不是在QFont中,Qpainter利用函式“drawText”繪製出文本的顏色,就是畫筆(QPen)的顏色,改變畫筆的顏色,文字的顏色也相應的改變。

掌握這些知識後,我們就可以開始繪製控制元件了。以按鈕為例,當滑鼠按下,在mousePressed函式中設定的變量表示滑鼠按下,然後呼叫update函式,通知widget呼叫paintEvent進行外觀繪製,這時候判斷表示滑鼠是否按下的變數,設定一個亮一點的顏色畫刷,繪製一個矩形;當滑鼠鬆開在mouseRelease函式中設定的變量表示滑鼠送來,同樣呼叫update函式,通知widget進行外觀繪製,這時候在paintEvent函式中判斷滑鼠是否按鬆開,設定一個暗一點的顏色畫刷,繪製一個矩形。就初步實現了簡單的按鈕繪製。

22
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • FireFox的文字選擇,分頁瀏覽,會議恢復注意這個小細節