QSS
QSS 样式表(简称QSS)的术语和语法规则几乎和CSS相同
样式规则
在qss中,一个样式由选择器(selector)和声明(declaration)组成。其中,选择器确定了样式的作用对象,声明确定了作用于该对象的确切样式。如:
QPushButton{ color:red }
在这段代码中,QPushButton为选择器(selector),{ color: red }为样式声明(declaration)。这段代码的作用是将所有QPushButton及其子类的前景色(文本颜色)设置为红色。
可以同时对多个对象设置样式,用逗号(,)来分隔选择器(selector)。如:
QPushButton, QLineEdit, QComboBox { color: red }
声明(declaration)部分是由一个由多个<属性: 值>(键值对)组成的列表,由大括号({})包围并由分号(;)分隔开。如:
QPushButton { color: red; background-color: white }
QSS 选择器
选择器 | 代码示例 | 解释 |
---|---|---|
通用选择器 | * | 所有 Qt 的 widget,即不声明选择器时,属性作用于所有组建 |
类型选择器 | QPushButton | 作用于QPushButton及其子类的实例。 |
属性选择器 | QPushButton[flat="false"] | 作用于非平面(flat="false" )的QPushButton实例。 |
类选择器 | .QPushButton | 作用于 QPushButton 的实例,但不匹配其子类的实例。(加了个. ) |
ID选择器 | QPushButton#okButton | 作用于对象名称为 okButton 的所有 QPushButton 实例。 |
后代选择器 | QDialog QPushButton | 匹配作为 QDialog 的子体(子级、孙级等)的所有 QPushButton 实例。 |
子选择器 | QDialog > QPushButton | 匹配作为 QDialog 的直接子级的所有 QPushButton 实例。 |
子控制 | QComboBox::drop-down | 要设置复杂 widget 的样式,需要访问 widget 的子控件,如 QComboBox 的下拉按钮或 QSpinBox 的上下箭头。选择器可以包含子控件,从而可以将规则的应用限制到特定的 widget 子控件。 |
伪类选择器 | QPushButton:hover | 选择器:状态,作为选择器,支持 ! 操作符,表示非。伪类选择器还支持链式规则:选择器:状态1:状态2:状态3 ,状态之间使用逻辑与,同时满足条件样式才生效 |
QSS 选择器优先级
- 更加具体的语句要优先级更高,有伪状态的优先级高,有指定objectname的优先级最高。
QPushButton{color:red;}
<QPushButton:hover{color: green}
<QPushButton#A{color: white}
常用伪类选择器
伪类 | 说明 |
---|---|
:disabled | Widget 被禁用时 |
:enabled | Widget 可使用时 |
:focus | Widget 得到输入焦点 |
:hover | 鼠标放到 Widget 上 |
:pressed | 鼠标按下时 |
:checked | 被选中时 |
:unchecked | 未选中时 |
:has-children | Item 有子 item,例如 QTreeView 的 item 有子 item 时 |
:has-siblings | Item 有 兄弟,例如 QTreeView 的 item 有兄弟 item 时 |
:open | 打开或展开状态,例如 QTreeView 的 item 展开,QPushButton 的菜单弹出时 |
:closed | 关闭或者非展开状态 |
:on | Widget 状态是可切换的(toggle), 在 on 状态 |
:off | Widget 状态是可切换的(toggle), 在 off 状态 |
QSS 文件使用方法
- 新建一个文本文件.txt,可以在里边先写QSS代码,先不写也行;
- 重命名,文件后缀改成.qss;
- 添加到资源文件qrc中
- 程序中使用qss文件,例如:
QFile qss(":/ZZW/qss/zzw.qss");
qss.open(QIODevice::ReadOnly);
setStyleSheet(qss.readAll());
QSS样式的作用范围
-
设置全局样式
可以在main函数中,直接给QApplication设置样式,此样式为全局样式,对整个应用都生效,例如:QString qstrStyle = "QPushButton{color:blue;}" a.setStyleSheet(qstrStyle);
-
设置窗口样式
可以给某个窗口对象设置样式,例如:w.setStyleSheet(qstrStyle);
此样式只对该窗口及它的子窗口生效,对其他窗口不生效。