qt的选择器中共有

  • 通用选择器(*): 作用于所有widget
  • 类型选择器: 作用于该类及子类
  • 类选择器: 只作用于这个类
  • ID选择器: 作用于某个对象
  • 属性选择器: 作用域某个成员变量
  • 包含选择器: 作用于某个类下的类
  • 子元素选择器: 作用于某个类的直接子widget
  • 伪类选择器: 选择某些状态,如QPushButton的hover和pressed状态
  • 子控件选择器: 选择某个部件下面的子部件

qss内部数属性一般是不区分大小写的,但是类名,属性名区分大小写

加载方法

QFile qss("StyleSheet.qss");
qss.open(QFile::ReadOnly);
app.setStyleSheet(qss.readAll());
qss.close();

类型、类、ID选择器

类型选择器

格式

className
{
attribute: value;
...
}

其中attribute是控件的各种属性,className是类名,由QObject::metaObject()::className获得。类型选择器匹配该类及其派生类

例如:

QPushButton
{
background: rgb(255, 255, 255);
}

在自定义的命名空间中,QObject::className()返回值中有::,和子控件选择器冲突。为了避免这个问题,我们可以把::换成—

namespace ns
{
class MyPushButton : public QPushButton
{
//...
}
}

//...
qApp->setStyleSheet("ns--MyPushButton {background: yellow; }");

类选择器

类选择器和前面的区别是它不会选择子类。格式为:

.className 
{
attribute: value;
}

例如
.QFrame
{
padding: 15px 25px;
}

ID选择器

ID选择器选择的是对象的某个具体实例.格式为:

#ID
{
attribute: value;
}

ID选择器会对所有同名的实例进行配置,无论它的类型是什么,而很多时候我们只想对某一个实例进行配置,因此一般前面需要加上类名匹配
QPushButton#settings_popup_fileDialog_button
{
min-height: 31px;
min-width: 70px;
border: 1px solid black;
color: #FOFOFO;
min-height: 10px;
border-radius: 3px;
background: qlineargradient(spread: pad, x1:0,y1:0,x2:0,y2:1,stop:0 #454648,stop:1 #7A7A7A);
}

包含、子元素选择器

包含选择器

格式:

selector1 selector2 ...
{
attribute: value;
}

它表示在selector1匹配的对象中,使用selector2进行筛选,然后对满足条件的对象进行匹配。

BaseDialog QPushButton
{
min-width: 12px;
min-height: 40px;
max-width: 120px;
max-height: 40px;
font-size: 20px;
padding: 0px;
}

子选择器

格式: selector1>selector2 { attribute: value; }

子选择器和上面的包含选择器相比多了一层限制,它只能有selector1和selector2,不能出现seelector3乃至更多。

它常用于对某些布局下特定控件进行选择

.QGroupBox>.QCheckBox
{
color: blue;
}

属性、伪类、子控件选择器

属性选择器

格式

[attribute=value]
{
attribute: value;
}

它先根据某些样式进行选择,然后修改样式
[objectName|="button"]//objectName以button开头
{
color: red;
}

QPushButton[flat=“false”]
{
color: red;
}

属性选择器用的计较少

伪类选择器

格式

类或类型选择器:status
{
attribute: value;
}

伪类选择器是对某些状态进行选择,如按下、禁用、启用等

伪类 说明
:disabled 控件禁用时
:enabled
:focus 获得焦点时
:hover 鼠标放在widget上时
:pressed
:checked 被选中时
:unchecked 未选中时

子控件选择器

子控件选择器是对某些复杂控件中的小部件进行设置,这一般是对官方给的控件中某些部分进行管理。

例如

QComboBox::down-arrow//QComBox的向下箭头
{
image: url(down-arrow.png);
}
QComboBox::down-arrow:pressed
{
position: relative;
top: 1px; left: 1px;
}

子控件选择器可以看这