Qt样式表使用注意项

时间:2021-08-18 23:25:20

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; }");

注意,这里的继承和上面的层叠不一样,层叠指不同样式表设置同一个对象,继承指的则是样式表规则中选择器对控件层级关系的影响