Qt样式表使用注意项
Qt样式表使用注意项
<1>.StyleSheet的使用
StyleSheet文件的默认后缀名为qss,可以通过命令行参数-stylesheet filename.qss来设置样式表,也可以通过QApplication::setStyleSheet 或 QWidget::setStyleSheet来设置应用程序或特定控件要使用的样式表
::setStyleSheet函数的参数是字符串(不是qss文件的名字,而是样式表的内容),所以直接使用的话,不方便一次设置大量的规则,但是可以使用资源文件将qss样式表嵌入到程序中,然后通过QApplication::setStyleSheet来使用,例如:
QFile file(":/qss/mystylesheet.qss"); file.open(QFile::ReadOnly); app.setStyleSheet(file.readAll());
<2>.样式表描述规则
例如:
QComboBox#myComboBox::down-arrow:pressed{
position: relative;
top: 1px; left: 1px;
}
其中:
QComboBox#myComboBox 这一部分叫类型选择器(Type Selector),QComboBox指定了对象类名,#name指定对象的实例名(非必须)
down-arrow 子控件描述符(subcontrol),和前面的字段用::隔开,这里表示组合框的下拉按键
pressed 伪状态(Pseudo-States)描述符,和前面的字段用:隔开,这里表示压下状态
以上除了第一个字段,都不是必须,而是进一步限制规则适用范围,属性定义,由成对的属性名:属性值组成,用;分隔。
<3>.优先级关系
更加具体的类型描述符定义的规则拥有更高优先级,例如(有鼠标悬停的按钮的文本颜色就是白色的,否则为红色):
QPushButton:hover { color: white }
QPushButton { color: red }
后定义的规则优先级高于前面的规则,例如(这种情况颜色为红色):
QPushButton:hover { color: white }
QPushButton:enabled { color: red }
样式表不考虑类得继承优先关系,例如(这种情况颜色为灰色):
QPushButton { color: red }
QAbstractButton { color: gray }
控件自身的样式表的优先级高于父控件或应用程序的样式表,例如:
qApp->setStyleSheet("QPushButton { color: white }"); myPushButton->setStyleSheet("* { color: blue }");
<4>.样式表继承
在标准的CSS样式表中,一个控件的字体和颜色属性如果没有明确设定,那么将自动继承自父控件,而在QT的样式表中,不会自动继承,例如:
qApp->setStyleSheet("QGroupBox { color: red; } ");
这种情况下,对于GroupBox中的添加的子控件,不会自动设置其颜色属性,如果要设置子控件的属性,需要明确设定:
qApp->setStyleSheet("QGroupBox, QGroupBox * { color: red; }");
注意,这里的继承和上面的层叠不一样,层叠指不同样式表设置同一个对象,继承指的则是样式表规则中选择器对控件层级关系的影响