通過Qt樣式表定製程式外觀(比較通俗易懂)

2021-08-17 20:17:34 字數 4565 閱讀 3615

1. 何為qt樣式表[喝小酒的網摘]

2. 樣式表語法基礎

3. 方箱模型

4. 前景與背景

5. 建立可縮放樣式

6. 控制大小

7. 處理偽狀態

8. 使用子部件定義微觀樣式

8.1. 相對定位

8.2. 絕對定位

摘要由於qt樣式表的引入,定製qt部件的外觀樣式變得非常簡單。 無論你是想僅僅修改乙個現有部件的外觀,還是想從零開始設計一套全新的介面風格, 現在都有了一種新的方法而不必再去繼承並實現乙個qstyle的子類。

1. 何為qt樣式表

樣式表是通過qstyle的乙個叫做qstylesheetstyle的特殊子類來實現的。 這個特殊的子類實際上是其他的系統特定風格類的包裹類, 它會把通過樣式表指定的自定義外觀風格應用在底層的系統特定風格之上。

qt 4.2包含了乙個叫做stylesheet的例子來幫助你學習樣式表, 這個例子自帶了兩個樣式:coffee和pagefold。

上面的coffee風格自定義了push button、frames和tooltip,但使用了下層的風格 (例如這裡是windows xp風格)來繪製checkbox,combobox和radio button。

pagefold風格完全重新定義了對話方塊中使用的所有控制項的外觀,從而實現了一種獨特的,平台無關的外觀。

2. 樣式表語法基礎

qt樣式表與css的語法規則幾乎完全相同,如果你已經了解了css,完全可以跳過本節。

乙個樣式表由一系列的樣式規則構成。每個樣式規則都有著下面的形式:

selector

選擇器(selector)部分通常是乙個類名(例如qcombobox),當然也還有其他的語法形式。

屬性(attribute)部分是乙個樣式表屬性的名字,值(value)部分是賦給該屬性的值。

為了使用方便,我們還可以使用一種簡化形式:

selector1, selector2, ..., selectorm

這種簡化形式可以同時為與m個選擇器相匹配的部件設定n種屬性。例如:

qcheckbox, qcombobox, qspinbox

這個規則設定了所有的qcheckbox、qcombobox和qspinbox的前景色、背景色和字型。

3. 方箱模型

在樣式表中,每個部件都被看作是乙個由四個同心相似的矩形組成的箱體:空白(margin)、邊框(border)、填充(padding)和內容(content)。對於乙個平面部件——例如乙個空白、邊框和填充都是0畫素的部件——而言,這四個矩形是完全重合的。

空白區域位於邊框外,並且總是透明的。邊框為部件提供了四周的框架,其border-style屬性可以設定為一些內建的框架風格,如inset、outset、solid和ridge。填充在邊框和內容區域之間提供了空白間隔。

4. 前景與背景

部件的前景色用於繪製上面的文字,可以通過color屬性指定。背景色用於繪製部件的填充矩形,可以通過background-color屬性指定。

背景使用background-image屬性定義,它用於繪製由background-origin指定的矩形區域(空白、邊框、填充或內容)。背 景在矩形區域內的對齊和平鋪方式可以通過background-position和background-repeat屬性指定。

如果指定的背景具有alpha通道(即有半透明效果),通過background-color指定的顏色將會透過透明區域。這一功能可以使背景在多種環境下重複利用。

該例子中使用的樣式表如下所示:

qframe

在這個例子中,qframe四周的空白、邊框和填充值都是一樣的。實際上margin屬性可以在上下左右四個方向分別指定我們需要的不同值,例如:

qframe

同時,我們也可以分別指定margin-top、margin-right、margin-bottom、margin-left四個屬性。

qframe

雖然目前我們僅僅使用了qframe作為例子,但是我們也可以同樣的將這些屬性應用於任何乙個支援方箱模型的qt部件,例如:qcheckbox、 qlabel、qlineedit、qlistview、qmenu、qpushbutton、qtextedit、和qtooltip。

5. 建立可縮放樣式

在預設情況下,通過background-image指定的背景會自動重複平鋪,以覆蓋部件的整個填充矩形(即邊框裡面的那個區域)。如果我們想建立能夠隨著部件大小自動縮放而不是平鋪的背景,我們需要設定一種稱之為「邊框」的東東。

「邊框」可以通過border-image屬性指定,它同時提供了部件的背景和邊框。乙個「邊框」被分為九個部分(九宮格),有點向tic-tac-toe遊戲的棋盤。

當乙個部件的邊框被填充時,四角的格仔通常不會發生變化,而其餘的五個格仔則可能被拉伸或平鋪以填充可用空間。

當指定乙個「邊框」時,除了本身,我們還必須指定用來分割九宮格的四條分割線。同時我們還必須指定非邊角的格仔是應該平鋪還是拉伸,以及邊框的寬度(用來確定邊角格仔的大小,防止邊角被縮放變形)。

例如,下面的樣式表定義了上圖中的button:

qpushbutton

另外,「邊框」還應該含有alpha通道,以使背景能夠在邊角處露出來。

6. 控制大小

min-width和min-height兩個屬性可以用來指定乙個部件的內容區域的最小大小。這兩個值將影響部件的minimumsizehint(),並在布局時被考慮。

例如:qpushbutton

如果該屬性沒有被指定,最小大小將從部件的內容區域和當前樣式中繼承。

7. 處理偽狀態

部件的外觀可以按照使用者介面元素狀態的不同來分別定義,這在樣式表中被稱為「偽狀態」。例如,如果我們想在乙個push button在被按下的時候具有sunken的外觀,我們可以指定乙個叫做 :pressed 的偽狀態。

qpushbutton

qpushbutton:pressed

下面是可用的偽狀態列表:

表 1. 偽狀態列表

偽狀態 描述

:checked button部件被選中

:disabled 部件被禁用

:enabled 部件被啟用

:focus 部件獲得焦點

:hover 滑鼠位於部件上

:indeterminate checkbox或radiobutton被部分選中

:off 部件可以切換,且處於off狀態

:on 部件可以切換,且處於on狀態

:pressed 部件被滑鼠按下

:unchecked button部件未被選中

8. 使用子部件定義微觀樣式

許多部件都包含有子元素,這些元素可以稱為「子部件」。spin box的上下箭頭就是子部件最好的例子。

子部件可以通過::來指定,例如qdatetimeedit::up-button。定義子部件的樣式與定義部件非常相似,它們遵循前面提到的方箱模型 (即它們可以擁有自己的邊框、背景等),並且也可以和偽狀態聯合使用(例如qspinbox::up-button:hover)。

下表列出了可用的子部件型別:

表 2. 子部件列表

子部件 描述

::down-arrow combo box或spin box的下拉箭頭

::down-button spin box的向下按鈕

::drop-down combo box的下拉箭頭

::indicator checkbox、radio button或可選擇group box的指示器

::item menu、menu bar或status bar的子專案

::menu-indicator push button的選單指示器

::title group box的標題

::up-arrow spin box的向上箭頭

::up-button spin box的向上按鈕

通過指定subcontrol-position和subcontrol-origin屬性,子部件可以被放置在部件箱體內的任何位置。並且,子部件的位 置還可以使用相對或絕對的方式進一步的調整。具體選擇何種調整方式取決於子部件具有固定的大小,還是會隨著父部件而變化。

8.1. 相對定位

相對定位適合於子部件具有固定大小的情形(通過width和height指定子部件大小)。使用這種方式,子部件可以以相對於subcontrol- position和 subcontrol-origin屬性定義的原始位置進行移動調整。使用left屬性可以把子部件向右移,top屬性可以把子部件向左移。

例如:qpushbutton::menu-indicator

當按下按鈕時,我們可以把選單指示器從原來的位置向右下方移動幾個畫素來模擬按鈕按下的狀態。

qpushbutton::menu-indicator:pressed

8.2. 絕對定位

絕對定位適合於子部件的位置隨父部件的變化而變的情形。與前面的例子相同,subcontrol-origin定義了父部件箱體的參考矩形。子部件的矩形區域則可以隨後通過相對於這個參考矩形四邊的偏移量來定義。

qpushbutton::menu-indicator

對於寬度或高度固定的子部件,subcontrol-position被用來說明其在subcontrol-origin指定矩形內的對其方式:

qpushbutton::menu-indicator

原文:

通過Qt4 2樣式表定製程式外觀

目錄1.何為qt樣式表 2.樣式表語法基礎 3.方箱模型 4.前景與背景 5.建立可縮放樣式 6.控制大小 7.處理偽狀態 8.使用子部件定義微觀樣式 8.1.相對定位 8.2.絕對定位 摘要由於qt樣式表的引入,定製qt部件的外觀樣式變得非常簡單。無論你是想僅僅修改乙個現有部件的外觀,還是想從零開...

Qt樣式表 5 使用樣式表設定按鈕的外觀

若對c 語法不熟悉,建議參閱本人所著 c 語法詳解 一書,電子工業出版社出版,該書語法示例短小精悍,對查閱c 知識點相當方便,並對語法原理進行了透徹 深入詳細的講解,可確保讀者徹底弄懂c 的原理,徹底解惑c 使其知其然更知其所以然。此書是一本全面了解c 不可多得的案頭必備圖書。13.10.1 基本規...

qt 通過樣式表修改背景

在qt中設定widget背景顏色或者方法很多種 重寫paintevent 調色盤qpalette 樣式表setstylesheet等等。setstylesheet pwidget setstylesheet background color blue 設定背景顏色 pwidget setstyles...