Qt样式表的术语和语法规则几乎和CSS相同。
1 QSS样式规则由一个选择器和声明组成。QPushButton{ color:red},QPushButton为选择器,{coloe:red}为声明。
2 多个选择器可指定同一个声明,用来对这一组部件统一设置。如QPushButton,QLabel,QTextLine{color:red};
参考助手:Qt Style Sheets Reference
中List of Properties
部分。
QSS支持所有的selectors defined in CSS2。下表总结最有用的类型选择器。
选择器 |
实例 |
说明 |
通用选择器 |
* |
匹配所有部件 |
类型选择器 |
QPushButton |
匹配QPushButton及子类的实例 |
类选择器 |
.QPushButton |
匹配QPushButton但不包含子类 |
属性选择器 |
QPushButton[flat =“flase”] |
匹配QPushButton中flat为false的实例 |
ID选择器 |
QPushButton#okButton |
匹配objectName为okButton的实例 |
后代选择器 |
QDialog QPushButton |
匹配属于QDialog后代(孩子,子孙等)的QPushButton所有实例 |
子类选择器 |
QDialog>QPushButton |
匹配属于Dialog直接子类的QPushButton所有实例。 |
对于样式复杂的部件,需要访问子控件,例如:QComboBox的下拉按钮或QSpinBox的上下箭头。例如:QComboBox::drop-down{ image:url(drop_down.png)}
参考助手:Qt Style Sheets Reference
中List of Stylable Widgets
部分和Qt Style Sheets Reference
中List of Sub-Controls
部分。
伪选择器可以包含伪状态,意味着限制基于部件状态的应用程序规则。伪状态出现在伪选择器的后面,用冒号(:)关联。列如鼠标滑过按钮: QPushButton:hover{color:white}
伪状态用感叹号(!)表示否定,例如鼠标不滑过QPushButton:!hover{color:red}
伪状态可以连接使用,这时候隐藏了一个逻辑与。例如当鼠标滑过一个选择的QCheckBox部件。QCheckBox:hover:checked{ color:white}。
如果需要可使用” , ”来表示逻辑或。列如 QCheckBox:hover:checked{ color : white}
伪状态也可以和子控件组合QComboBox::drop-down:hover{ image:url(dropdown_bright.png)}
QSS可以在QApplication,父部件,子部件中设置。任意部件的有效样式表通过合并部件的祖先(父,祖等)以及QApplication上设置样式表。冲突发生时,不论冲突规则的特殊性,部件自身样式总优先于任何继承样式表。
可实现动态的效果。可以为QObject设置一个urgent属性,该属性将跟随该类。如下创建样式表选择器依赖于动态属性,例如urgent:QLineEdit[urgent = true]{ color:red;}
当属性值发生变化时,样式表不会自动发生变化,需要手动更新。例如:
myLineEdit->setProperty("urgent", true);
myLineEdit->style()->unpolish(myLineEdit); //将原来的样式表属性进行清除
myLineEdit->style()->polish(myLineEdit); //设置新的样式表属性
任何可被识别的Q_PROPERTY都可使用qproperty-
比如:在QLabel 中:Q_PROPERTY(QString text READ text WRITE setText) 则可在样式表中设置成:QLabel{qproperty-text:"helloWorld";} 与setText()具有同样的作用。
当需要设置一个原始属性没有的属性时,自定义属性可派上用场了。需要注意的是QSS只能用于QWidget及其子孙。
Qt助手中有关各种部件的QSS详细讲解,资源很丰富,请参考:Qt Style Sheets Examples。