QT实现样式布局常用的方法有调用类中的方法或者使用setStyleSheet实现,这样管理起来会不太方便,除非是需要和逻辑绑定在一起,否则使用QSS文件统一管理是很合适的。
首先将qss文件添加到qrc资源文件中,使用下列语句进行植入:
QFile file(":/qss/style.qss");
file.open(QIODevice::ReadOnly);
QString stylesheet = QLatin1String(file.readAll());
file.colse();
qApp->setStyleSheet(stylesheet);
通用选择器使用*
符号作为前缀,一般常用于限制整个页面的基础参数,例如:
* {
font-family:"Source Han Sans CN Regular;
font-size:18px;
outline:none;
color:#565656;
font-weight:600;
}
类型选择器作用于某一个类别,比如QPushButton,QWidget等,使用后子控件
也会继承父控件
的样式设置。直接使用QT内置的变量名进行操作。例如对QPushButton按钮进行背景设置:
QPushButton {
background-color : #ffffff;
}
类型选择器不能使用自定义用法,比如你有个objName对象为m_PushButton,那么你想修改它的样式应该使用ID选择器,而不是类型选择器,以下使用方法是错误的。
m_PushButton {
background-color : #ffffff;
}
这种使用方式不会生效
。
使用类型选择器在有一级Widget和二级Widget时会有错误的情况发生,比如二级Widget没设置样式,那么它会继承一级Widget的样式。这时使用类选择器能够对选择的某个界面特定处理,子界面不会继承父界面样式内容
。
例如:
.m_Widget {
background-color : #ffffff;
}
当某个特定组件需要设定为某种样式的时候需要使用到ID选择器,比如我的Widget中包含一个子Widget后者PushButton,这时用ID选择器就效果会比较好一些。QSS包含层级关系
,当写的样式越精准就越会适配。注意这里的ID名是objectName名字,这个可以在.ui文件中设置或者在代码中使用setObjectName方法来设置。
例如:
#m_loginWidget{
background-color : #ffffff;
}
属性选择器常用于动态属性,比如我有几个按钮和Frame要做样式匹配,这时可以在.ui文件中点击+号添加动态属性,如添加动态属性:color,值为white。
则做样式适配的时候可以这样写:
*[color = "white"]
{
background-color : #ffffff;
}
*
通配符可以和其它选择器结合使用,因此可以通配所有符合动态属性的控件。
子元素选择器仅会作用于父类控件中的子元素
,有个生动的例子,比如QGroupBox是由QWidget派生出来的。要设置QGroupBox中的QPushButton样式为红色。那么可以使用QWidget > QPushButton ①
和QGroupBox > QPushButton ②
实现。不过①会导致Widget中所有的按钮控件都为红色,则和子元素选择器的定义不符合。因为类型选择器会让没有设置样式的子元素都继承它的样式
,所以尽量使用.
类选择器替代类型选择器。
如:
.QWidget > .QPushButton
{
background-color : red;
}
后代选择器使用格式(中间为空格):
类名① 类名②
{
background-color : red;
}
主要用于对多个对话框中的一个按钮作更改。
先遍历所有控件找到类名①,再把类名①中的所有类名②替换。
A上的控件都为B的子后代,若B上还有C控件,则C控件中也会被匹配。
和先后初始化的关系无关,主要看包含关系
。
并集选择器使用逗号,
进行分割,表示两个控件使用同一样式。
如:
.QWidget , .QLabel
{
background-color : #ffffff;
}
格式:
类型选择器::子控件{ background-color : #ffffff;}
类选择器::子控件{ background-color : #ffffff;}
比如对下拉框的设置:
QComboBox::down-arrow:on {
top: 1px;
left: 1px;
}
常见伪状态
:checked # 控件被选中
:unchecked # 控件被取消选中
:hover # 鼠标停留
:pressed # 控件被按下
:focus # 获取到焦点
:disable # 失效控件
:enable # 有效控件
:indeterminate # checkBox或radioButton被部分选中
:on # 开启状态
:off # 关闭状态
使用格式如下:
类型选择器:状态{值;}
.类选择器:状态{值;}
冒号两边不能有空格
。同时伪状态选择器支持取反,支持并集选择器和子控件选择器。
如:
/*并集选择器*/
QPushButton:checked,QCheckBox:!hover {color : white;}
/*子控件选择器*/
QCombox::drop-down:hover {image: url{down.png};}
选择器 | 用途 |
---|---|
通用选择器 | 用于给应用程序设置统一的字体、大小、颜色等。 |
类型选择器 | 常用于给控件做统一初始化。 |
类选择器 | 只对. 后的类做样式处理,不匹配其派生对象。 |
ID选择器 | 用于特殊控件,如登录按钮等。 |
属性选择器 | 对添加了属性的控件做动态处理。 |
子元素选择器 | 仅对子元素做样式匹配,不过在使用类型选择器时会遇到都被匹配的问题,这是类型选择器导致的。 |
后代选择器 | 对同个控件中多个相似控件处理时可以使用后代选择器。 |
并集选择器 | 同时设置多个控件样式。 |
子控件选择器 | 对控件中的部分标准 控件做样式匹配,如QCheck的down-arrow。 |
伪类选择器 | 对伪状态进行样式处理。 |
常用方式:
QTableView{
border : 0 ;
selection-color:#ff0000;
}
QTableView::item::selected{
background:rgba(2,91,199,10%);
}
/*水平方向背景*/
QHeaderView::sectuib::horizontal{
background-color:#1fb558;
}