QSS不仅提供了同CSS中的盒子模型,同样也为QT提供了一套选择器。何为选择器?选择器就是样式作用的对象名称,比如把一个按钮QPushButton的背景色变成红色,那么这个QPushButton就是你的选择器。在QT中,主要提供了以下选择器:
- 通用选择器
- 类型选择器
- 类选择器
- ID选择器
- 属性选择器
- 包含选择器
- 子元素选择器
- 伪类选择器
- Subcontrol选择器
下面来一一介绍上诉的选择器:
一、通用选择器
通用选择器的最明显,以“*”表示,作用于全局的控件元素。如下:
*
{
margin:0px;
padding:0px;
font: 6pt "黑体";
}
二、类型选择器
类型选择器,以类名作为选择器名称(选择器本身),作用于该元素以及其所有的子元素。比如:QFrame,(附QT的继承关系图)。
例:
QFrame{
background:gray;
}
效果如下:
QFrame,以及其子元素QLabel都受到了影响,背景色变成了gray。而QpushButton不是QFrame的子元素,所以不受影响。
三、类选择器
类选择器,基本表达为"."+选择器(对象名称)。如:.QFrame。作用于选择器本身,或者说元素本身,不会影响其他的元素。
.QFrame{
background:gray;
}
注意:类型选择器和类选择器的不同点在于作用域的不同。
四、ID选择器
ID选择器,基本表达式:"#"+objectName。作用于objectName元素。建议objectName是唯一的。
#bgBtn{
background-image: url(:/new/prefix1/1.png);
}
在Qt Designer中将QPushButton的objectName改成了bgBtn。
五、属性选择器
属性选择器,有点类似key-value,基本的写法:选择器[level="名称"]。之后需要在代码中设置setProperty(key,value)。之后在重启程序后才会生效。简单示例一下:
//在qss文件中定义:
QPushButton[level="dangerous"]{
background:red;
}
//在cpp文件中编写:
ui->pushButton->setProperty("level","dangerous");
六、包含选择器
包含选择器,选择器之间使用空格隔开,如:选择器1 选择器2 ...选择器N。它的作用域与以选择器1为首的所有子选择器。如同祖辈一样,无论敷衍了多少支系,源头还是一个,这些支系都受源头的影响。
QFrame QPushButton{
border:2px solid magenta;
border-radius:10px;
background:white;
padding:2px 15px;
}
QFrame作为源头,QPushButton作为支系,都会受其影响而改变样式。
七、子元素选择器
子元素选择器,选择器之间以>隔开。如选择器1>选择器2.其作用域如同父子关系,作用与其直接支系,旁系不受影响。
QFrame > QPushButton
{
border:2px solid magenta;
border-radius:10px;
background:white;
padding:2px 15px;
}
可以看到,QGroupBox中的QPushButton不受影响,因为其parent是QGroupBox。
八、伪类选择器
伪类选择器,即:选择器::状态。同时支持链式规则,如:选择器::状态1::状态2::状态3。需要注意的是,因为使用的逻辑与,所以需要满足所有状态才会生效。
常用的状态有:
:hover | 鼠标悬浮 |
:focus | 聚焦 |
:pressed | 鼠标下压 |
九、Subcontrol选择器
选择器::subcontrol。是QT独有的一个选择器。具体的以后再说明。