选择器决定了 style sheet 作用于哪些 Widget,
QSS 的选择器有:
- 通用选择器 *
- 类型选择器
- 类选择器
- ID 选择器
- 属性选择器
- 包含选择器
- 子元素选择器
- 伪类选择器
- Subcontrol 选择器
我们了解一下其中较为常用的几类选择器:
1 通配符选择器
匹配所有的控件,用星号表示
*
{
background-color: red;
}
可以发现,所有的控件都已经变成红色了,也可以在*后面指定子类,如下所示:
* QLabel
{
background-color: rgb(54, 54, 54);
color: rgb(230, 230, 230);
font: bold 18px "Microsoft YaHei";
border-top-style: solid;
border-top-width: 2px;
border-top-color: red;
border-top: 2px solid red;
border-right-style: solid;
border-right-width: 3px;
border-right-color: green;
border-right: 3px solid green;
border-bottom-style: solid;
border-bottom-width: 2px;
border-bottom-color: blue;
border-bottom: 2px solid blue;
border-left-style: solid;
border-left-width: 3px;
border-left-color: aqua;
border-left: 3px solid aqua;
border-radius: 10px;
padding-left: 0px;
}
QLabel:hover
{
color: red;
background-color: green;
}

可以发现,所有的QLabel都被渲染成功了。
2 类型选择器
通过控件类型来匹配控件的(包括子类)
QWidget {
background-color:yellow
}
如果想防止子类,例如窗口被修改,可以设置属性
//禁止父窗口影响子窗口样式
setAttribute(Qt::WA_StyledBackground);
类选择器也是通过控件类型来匹配控件的,但不同的是不包含子类,语法是在类前面加了个.
.QWidget
{
background-color: yellow;/*所有的Widget背景色都会变成黄色,不包括主窗口*/
}
3 ID选择器
ID选择器是结合控件的objectname来匹配控件的,qss里objectname前加个#来表示,不同控件的objectname是可以相同的
#blue {
background-color:blue
}
4 属性选择器
属性选择器是结合控件的属性值来匹配控件的,首先要设定控件的属性,qss里属性用[proterty = attitude]来限制
qt:
label1.setProperty('notice_level','error')
label2.setProperty('notice_level','warning')
qss:
.QLabel {
background-color:pink;
}
.QLabel[notice_level='warning'] {
border:5px solid yellow;
}
.QLabel[notice_level='error'] {
border:5px solid red;
}
这里还有个用法,就是qss内只定义属性值,只要有这个属性的控件就可以被选中
.QLabel [notice_level]{
background-color:pink;
}
.QLabel[notice_level='warning'] {
border:5px solid yellow;
}
.QLabel[notice_level='error'] {
border:5px solid red;
}
只要有novice_level这个属性的控价都是生效的。
1984

被折叠的 条评论
为什么被折叠?



