Qt Style Sheets
Qt Style Sheet 是一个强大的机制,它允许你来定制widget的外观。此外也可通过子类化QStyle。他的概念、术语、语句很大程度受了CSS样式表的影响。
主题:
- Overview
- The Style Sheet Syntax
- Qt Designer Integration
- Customizing Qt Widgets Using Style Sheets
- Qt Style Sheets Reference
- Qt Style Sheets Examples
概览:
Style sheets 是文字式的说明,能被设置在整个应用,使用QApplication::setStyleSheet()或者在一个特别的widget(和他的孩子)使用QWidget::setStyleSheet().如果一些style sheets被设置在不同的水平,Qt得到有效的style sheet从那些被设置的。这被叫做级联。
例如:下面得style sheet表明所有QLineEdit应该使用黄色作为他们的背景色。所有的QCheckBox应该使用红色作为文字颜色。
QLineEdit {background: yellow}
QCheckBox {color : red}
这种风格定制,style sheet是更强大的比QPalette。例如,他可能尝试设置QPalette::Button角色为红色,为一个QPushButton来包含一个红色的按钮。尽管如此,这不被保证来工作为所有的样式,因为样式作者是被限制在不同的平台的准则。
Style sheets让你呈现所有的定制风格,他们是不同或者不可能使用QPalette单独呈现。如果你想要黄色背景为某强制的区域,红色文字为潜在的毁灭性的按钮,或者想要改变checkBox,都可使用style sheets。
Style sheets被应用在目前的widget style的顶部。意味着你的应用将看起来更像本地的风格。但是任何style sheet构造将被考虑。不像pattle无足轻重的,style sheets提供保证,如果你设置一个按钮的背景颜色为红色,你能确保按钮将有一个红色的背景,在所有的平台上。此外,Qt Designer提供风格集成,使他容易的预览风格的效果在不同的widget style上。
此外,style sheets能被用来提供一个与众不同的外观和感觉为你的应用,不必子类化QStyle。例如,你能使用随意的图片转世按钮来使他们与众不同。使用这个机制,你也能完成较小的定制。他将正常的需要子类化一些风格的类,例如详述一个style init。Style sheet例子描述在定义两个完全不同的风格下,你能试验并且修饰按照意愿。
当一个style sheet被激活,QStyle返回被QWidget::style()是一个包装“style sheet”风格,不是特别平台的风格。包装风格确保任何激活的风格被遵守,否则促使绘画操作者到基本的、平台独立的风格。
警告:Qt样式表目前不支持为定制的QStyle子类。我们计划在未来的版本中加入。
The Style Sheet Syntax
Qt Style Sheet机制与css几乎相同。
- Style Rules
- Selector Types
- Sub-Controls
- Pseudo-States
- Conflict Resolution
- Cascading
- Inheritance
- Widgets inside C++ namespaces
- Setting QObject properties
风格规则:
Style sheets包含一套style 规则。一个style rule 由一个selector和一个declaration组成。Selector表明那个widget被rule影响;declaration表明那个属性应该被设置在widget,例如:
QPushButton { color : red}
在上面的style rule,QPushButton是一个selector,{color :red }是一个declaration。Rule表明QPushButton和他的子类应该使用red作为他们的前景颜色。
Qt style sheet一般是不敏感的,(color,Color,COLOR,CoLor代表同样的属性)。唯一的区别是类名,对象名,和Qt特性名,是敏感的。
一些selector能被表明为同样的declaration,使用那个逗号(,)来区分selectors。例如,
QPushButton, QLineEdit, QComboBox { color: red }
等同于下面三条语句:
QPushButton { color: red }
QLineEdit { color: red }
QComboBox { color: red }
Declaration部分是一个清单 属性:值(成对出现)。关闭在{}和区别用分号。例如:
QPushButton { color: red; background-color: white }
Selector类型:
到目前为止所有的例子使用最简单的selector。类型选择器。Qt Style Sheets支持所有的选择器定义在CSS2。
选择器 例子 解释
通用选择器 * 适合所有widget
类型选择器 QPushButton 适合QPushButton和他的子类
属性选择器 QPushButton[flat=”false”] 适合不是flat的QPushButton。你能使用这个
选择器来测试任何Qt属性,支持QVariant::toString()。此外,特别的class属性被支持。这个选择器可能也被用来测试有活力的属性。为更多的关于使用有活力的属性,参考
Customizing Using Dynamic Properties。代替使用=,你能使用~=来测试是否一个qt属性QStringList包含一个被给的QString
警告:如果Qt属性的值,改变在style sheet已经被设置之后,他可能必须迫使一个style sheet重新计算。一种办法完成这个是取消style sheet 并且重新设置它。
类选择器 .QPushButton 适合QpushButton,但是不是他的子类。这 是相同的*[class~=”QPushButton”]
ID选择器 QPushButton#okButton 适合所有QPushButton,他们的对象名是okButton
后代选择器 QDialog QPushButton 适合所有QPushButton,他们是一个QDialog的后代
孩子选择器 QDialoog>QPushButton 社和所有QPushButton,他们是QDialog的直接孩子。