Qt樣式表
标簽(空格分隔): Qt樣式表、setStyleSheet、選擇器
一、Qt樣式表
1.1 Qt樣式表介紹
Qt樣式表是一個可以自定義部件外觀的強大機制,樣式表的概念、術語、文法均受到HTML的層疊樣式表(Cascading Style Sheets,CSS)的啟發。
樣式表可通過QApplication::setStyleSheet()函數将其設定到整個應用程式上,也可以使用QWidget::setStyleSheet()将其設定到指定的部件或子部件上,不同級别均可設定樣式表,稱為樣式表的層疊。樣式表也可通過設計模式編輯樣式表。
1.2 Qt樣式表文法
-
(1) 樣式規則
每個樣式規則由選擇器和聲明組成。
選擇器:指定受該規則影響的部件。
聲明:指定這個部件上要設定的熟悉
如:QPushButton{color:red}
QPushButton是選擇器;
{color:red}是聲明;
color是屬性;
red是值。
選擇器{屬性1:值1;屬性2:值2;屬性3:值3}
此規則指定了QPushButton和它的子類使用紅色作為前景色(指字型顔色)。樣式表中一般不區分大小寫,如color與coLOR表相同屬性,但類名、對象名及Qt屬性名區分大小寫。
聲明中的多組“屬性:值”清單以分号“;”隔開,如
QPushButton{color:red;background-color:white} //前景色為紅色,背景色為白色
- (2)選擇器類型
選擇器 | 示例 | 說明 |
---|---|---|
通用選擇器 | * | 比對所有部件 |
類型選擇器 | QPushButton | 比對所有QPushButton執行個體及它的所有子類 |
屬性選擇器 | QPushButton[flat=”false”] | 比對QPushButton的屬性flat為false的執行個體 |
類選擇器 | .QPushButton | 比對所有QPushButton執行個體,但不包括它的子類 |
ID選擇器 | QPushButton#okButton | 比對所有QPushButton中的okButton對象的執行個體 |
後代選擇器 | QDialog QPushButton | 比對所有的QPushButton執行個體,它們必須是QDialog的子孫部件 |
孩子選擇器 | QDialog>QPushButton | 比對所有的QPushButton執行個體,它們必須是QDialog的直接子部件 |
-
(3)子部件
對于一些複雜的部件修改樣式,可能需要通路它們的子部件,如QComboBox的下拉按鈕,QSpinBox的向上、向下箭頭燈。
如:
下拉按鈕設定圖檔屬性:
QComboBox::drop-down{image:url(dropdown.png)}
-
(4)僞狀态
①選擇器可以包含僞狀态來限制規則在部件的指定狀态上的應用。僞狀态在選擇器之後,用冒号隔離。如
滑鼠懸停在按鈕上時被應用:
QPushButton:hover{color:white}
滑鼠不懸停在按鈕上時被應用(!表否定):
QPushButton:!hover{color:white}
②僞狀态可多個連用,達到邏輯與效果。如
滑鼠懸停在一個被選中的QCheckBox部件上時才應用規則:
QCheckBox:hover:checked{color:white}
③僞狀态可通過逗号達到邏輯或效果。如
QCheckBox:hover,checked{color:white}
④僞狀态和子部件聯合使用。如
QComboBox::drop-down:hover{image:url(dropdown_bright.png)}
-
(5)沖突解決
幾個樣式規則對相同的屬性指定不同的值時會産生沖突。如
QPushButton#okButton{color:gray}
QPushButton{color:red}
沖突原則:特殊的選擇器優先。此例中QPushButton#okButton代表的是單一對象,而不是一個類的所有執行個體,是以okButton的文本顔色會是灰色的。同樣的有僞狀态的比沒有僞狀态的優先。
1.3 Qt設計模式下設定樣式表
- ①右鍵單擊部件,選擇“改變樣式表”,然後進行樣式的編輯。
- ②部件屬性區選擇styleSheet也可進行樣式的設定。