Qt設置界面方式
1.繼承QStyle,實現自定義子類
2.Qt Style Sheets(類似與HTML CSS)配置
概覽
QApplication::setStyleSheet設置應用程序的全部樣式;
QWidget::setStyleSheet設置特定QWidget或者其子類的樣式。
Qt Style Sheets支持級聯設置,比QPalette的功能更加強大,當一個style sheet設置後,QWidget::style()將返回樣式包裝器,而不是平臺本身的樣式。
語法
1selector+declaration selector是界面 declaration是界面屬性
例如:QPushButton {color:red} QPushButton是selector {color:red}是declaration
規則:QPushButton和它的子類的前景色是紅色。
2.declaration大小寫不敏感,color Color COLOR和cOloR表示同一屬性。
3.selector帶下斜敏感,類名 對象名和Qt屬性名(?)
4.不同的selector可以用逗號(,)分隔組裝後,使用相同的declaration。
例如:QPushButton,QLineEdit,QComboBox{color:red} ==
QPushButton{color:red}
QLineEdit{color:red}
QComboBox{color:red}
5.declaration由一組property:value組成,用{}包起來。
例如:QPushButton{color:red; background-color:white}
6.selector類型
universal selector | * | 所有widgets |
type selector | QPushButton | QPushButton和它的子類 |
property selector | QPushButton[flat="false"] |
flat是false的QPushButton = QWidget中的屬性必須支持可以調用toString, ~=QWidget中的屬性包含設置的屬性名 |
class selector | .QPushButton | QPushButton,不包含其子類,該表達式等價於 *[class ~= "QPushButton"] |
id selector | QPushButton#okButton | QPushButton對象名爲okButton, object name |
descendant selector | QDialog QPushButton | QPushButton的父對象、祖父對象等是QDialog |
child selector | QDialog QPushButton | QPushButton的父對象是QDialog(直屬對象) |
7.sub-controls
複雜界面,有子控制對象的widget,例如QComboBox包含drop-down按鈕,QSpinBox包含up and down arrows。
selector可以包含子控制對象。例如
QComboBox::drop-down{image:url(dropdown.png)}
8.pseudo-states
selectors可以包含pseudo-states,設置widget某一種狀態。用冒號(:)間隔。例如 QPushButton:hover{color:white}
支持!符號 如:QRadioButton:!hover{color:red}
支持串聯,如:QCheckBox:hover:checked{color:white}
QPushButton:hover:!pressed{color:blue}
QCheckBox:hover, QCheckBox:checked{color:white}
QComboBox::drop-down:hover{image:url(dropdown_bright.png)}
9conflic Resolution
考慮到對同一對象的同一屬性多次設置樣式,如
a. QPushButton#okButton{color:gray}
b. QPushButton{color:red}
a樣式比b樣式更具針對性,故優先。
帶有pseudo-states的selector,如
a. QPushButton:hover{color:white}
b. QPushButton{color:red}
a比b具有高優先級
對於衝突的屬性設置,遵循下列規則
1.
10.級聯
qApp->setStyleSheet("QPushButton{color:white}");
myPushButton->setStyleSheet("color:blue");
myPushButton的color爲blue.
11.繼承
qApp->setStyleSheet("QGroupBox{color:red;}");
如果QPushButton是QGroupBox的子對象,QPushButton不繼承QGroupBox的設置,若需要QPushButton繼承樣式,
qApp->setStyleSheet("QGroupBox, QGroupBox *{color:red;}");
或者qApp->setAttribute(Qt::AA_UseStyleSheetPropagationInWidgetStyles, true);
如果palette和style sheet同時設置,style sheet具有高優先級。
12.命名空間
namespace ns{
class MyPushButton : public QPushButton{};
}
qApp->setStyleSheet("ns--MyPushButton{background-color:yellow;}");