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
的直接孩子。