后代选择器
格式:选择器1 选择器2{属性:值;}
这个选择器表示:在选择器1匹配的所有对象中,找到选择器2中所有匹配的所有后代对象,并给他们设置样式。
注意:
1.后代选择器必须使用空格隔开每个选择器;
2.后代选择器可以通过空格一直延续下去,例如:选择器1 选择器2 选择器3 ... 选择器N{属性:值;})。
3.后代选择器还可以使用类选择器,id选择器;
4.qt中控件的父子关系,取决于如何布局。
一般用法:
后代选择器一般用于指定特定类的后代的样式,例如在应用程序中,有很多类似的对话框,它们中包含一些样式相同的按钮,那我们可以使用后代选择器为它们指定样式。
BaseDialog QPushButton
{
min-height:40px;
min-width:120px;
max-width:120px;
max-height:40px;
font-size:20px;
padding:0px;
}
子元素选择器
格式:选择器1>选择器2{属性:值;}
子元素选择器表示找到指定选择器所匹配的对象中的所有特定直接子元素然后设置属性,即找到选择器1匹配到的对象中的被选择器2匹配到的直接子元素然后设置属性。
注意:
1.子元素选择器必须用">"连接,">"两边有没有空格都可以,但是不建议写空格,因为会与后代选择器的连接符混淆;
2.子元素选择器只会查找“儿子”,不会查找其它后代。
3.资源色选择器不仅可以使用类型选择器,还可以使用类选择器,id等选择器;
4.子元素选择器不能通过">"一直延续下去;
5.由于qt中继承关系的widgets比较多,在使用子元素选择器时,需要注意继承关系。举例,我只想选中QGroupBox中的QPushButton,那么我可以有两种写法:
①QWidget>QPushButton{color:red;}
②QGroupBox>QPushButton{color:red;}
这是因为QGroupBox是QWidget的派生类,类型选择器QWidget会选中所有它的派生类对象,这些对象中包括QGroupBox,因此写法①会将所有的QPushButton的前景色设置为红色。推荐在使用子元素选择器时,使用类选择器代替类型选择器
一般用法:
子元素选择器一般用于一些特定布局条件中的控件,例如我想给直接布局在QGroupBox的QCheckBox设置一些特定属性,代码如下:
.QGroupBox>.QCheckBox
{
color:blue;
}
属性选择器
格式:
[attribute=value]{属性:值;}
表示匹配有特定属性attribute,并且值为value的所有控件,然后设置样式;
[attribute|=value]{属性:值;}
表示匹配有特定属性attribute,并且值以value开头的所有控件,然后设置样式;
[attribute~=value]{属性:值;}
表示匹配有特定属性的attribute,并且包含value的所有控件,然后设置样式;
注意:
1.attribute|=value表示attribute属性的值以value开头,无论value后面的还有没有值,或者value后面是什么,均能匹配到,举例:
[objectName|="button"]
{
color:red;
}
表示将objectName属性以button开头的所有控件的前景色设置为红色。
attribute~=value表示attribute属性的值中包含value,注意:value必须是独立的单词,也就是包含value并且value是被空格隔开的,举例:
[objectName~="button"]
{
color:red;
}
而我在代码中,设置objectName的语句为:
pBtn1->setObjectName("button1234");
pBtn2->setObjectName("abc button 22");
结果只匹配到了pBtn2。
2.此处的属性,通常是指Q_PROPERTY宏所声明的属性,并且属性类型要受QVariant::toString()支持。
3.在设置了样式表后,相应的属性值会发生改变,则有必要重新加载样式表,可以通过取消样式表,再重新设置一次。
style()->unpolish(this);
style()->polish(this);
并集选择器
格式:选择器1,选择器2,选择器3{属性:值;}
并集选择器表示,将每个单独选择器匹配到的控件放在同一个结果集中,并给结果集中的每个控件都设置声明语句中的样式。
注意:
1.用“,”连接不同的选择器;
2.可以使用类选择器,类型选择器,ID选择器,属性选择器等。
一般用法:
主要用于给具有相同属性,并且外观相似的控件设置样式。例如:
.QLineEdit,.QComboBox
{
border:1px solid grey;
background-color:white;
}
子控件选择器
格式:
类型选择器::子控件{属性:值;}
类选择器::子控件{属性:值;}
表示对类型选择器或类选择器指定的所有控件的子控件设置样式;
QComboBox::down-arrow{
image:url(:res/arrowDown.png);
}
样式化所有QComboBox的drop-down的部分。
伪类选择器
格式:
类型选择器:状态{属性:值;}
类选择器:状态{属性:值;}
表示对类型选择器或类选择器指定的所有控件设置它在指定状态时的样式。
说明
选择器也许会包含给予widget的state的程序限制规则的伪状态。伪状态以冒号(:)作为分隔紧跟着选择器。
QPushButton:hover{color:white;}
伪状态可以使用感叹号进行取反,下面一条规则在鼠标没有悬浮在QRadioButton上方时生效:
QRadioButton:!hover{color:red;}
伪状态可以链接,在这样的情况下,隐式第包含了逻辑与。
QCheckBox::hover:checked{color:red;}
伪状态的取反也可以出现在伪状态链中;
QPushButton::hover:!pressed{color:blue;}
如果有需要,可以使用逗号表示逻辑或
QCheckBox:hover,QCheckBox:checked{color:white;}
伪状态可以与subcontrol组合使用,
QComboBox::drop-down:hover{image:url(dropdown_bright.png);}