Qt:QSS语法规则以及使用总结

目录

  • 1、引言
  • 2、加载方法
  • 3、选择器类别
    • 3.1通用选择器
    • 3.2类型选择器
    • 3.3类选择器
    • 3.4 ID选择器
    • 3.5 属性选择器
    • 3.6 子元素选择器
    • 3.7 后代选择器
    • 3.8 并集选择器
    • 3.9 子控件选择器
    • 3.10 伪类选择器
  • 4、总结

1、引言

  QT实现样式布局常用的方法有调用类中的方法或者使用setStyleSheet实现,这样管理起来会不太方便,除非是需要和逻辑绑定在一起,否则使用QSS文件统一管理是很合适的。

2、加载方法

  首先将qss文件添加到qrc资源文件中,使用下列语句进行植入:

QFile file(":/qss/style.qss");
file.open(QIODevice::ReadOnly);
QString stylesheet = QLatin1String(file.readAll());
file.colse();
qApp->setStyleSheet(stylesheet);

3、选择器类别

3.1通用选择器

  通用选择器使用*符号作为前缀,一般常用于限制整个页面的基础参数,例如:

	* {
		font-family:"Source Han Sans CN Regular;
		font-size:18px;
		outline:none;
		color:#565656;
		font-weight:600;
	  }

3.2类型选择器

  类型选择器作用于某一个类别,比如QPushButton,QWidget等,使用后子控件也会继承父控件的样式设置。直接使用QT内置的变量名进行操作。例如对QPushButton按钮进行背景设置:

  QPushButton {
 	 background-color : #ffffff;
  }

  类型选择器不能使用自定义用法,比如你有个objName对象为m_PushButton,那么你想修改它的样式应该使用ID选择器,而不是类型选择器,以下使用方法是错误的。

m_PushButton {
 	background-color : #ffffff;
 	}

  这种使用方式不会生效

3.3类选择器

  使用类型选择器在有一级Widget和二级Widget时会有错误的情况发生,比如二级Widget没设置样式,那么它会继承一级Widget的样式。这时使用类选择器能够对选择的某个界面特定处理,子界面不会继承父界面样式内容
例如:

 .m_Widget {
 	 	background-color : #ffffff;
 }

3.4 ID选择器

  当某个特定组件需要设定为某种样式的时候需要使用到ID选择器,比如我的Widget中包含一个子Widget后者PushButton,这时用ID选择器就效果会比较好一些。QSS包含层级关系,当写的样式越精准就越会适配。注意这里的ID名是objectName名字,这个可以在.ui文件中设置或者在代码中使用setObjectName方法来设置。
例如:

#m_loginWidget{
 	 	background-color : #ffffff;
}

3.5 属性选择器

  属性选择器常用于动态属性,比如我有几个按钮和Frame要做样式匹配,这时可以在.ui文件中点击+号添加动态属性,如添加动态属性:color,值为white。
  则做样式适配的时候可以这样写:

*[color = "white"]
{
 	background-color : #ffffff;
}

*通配符可以和其它选择器结合使用,因此可以通配所有符合动态属性的控件。

3.6 子元素选择器

子元素选择器仅会作用于父类控件中的子元素,有个生动的例子,比如QGroupBox是由QWidget派生出来的。要设置QGroupBox中的QPushButton样式为红色。那么可以使用QWidget > QPushButton ①QGroupBox > QPushButton ②实现。不过①会导致Widget中所有的按钮控件都为红色,则和子元素选择器的定义不符合。因为类型选择器会让没有设置样式的子元素都继承它的样式,所以尽量使用.类选择器替代类型选择器
如:

.QWidget > .QPushButton
{
 	background-color : red;
}

3.7 后代选择器

后代选择器使用格式(中间为空格):

类名① 类名②
{
 	background-color : red;
}

主要用于对多个对话框中的一个按钮作更改。
先遍历所有控件找到类名①,再把类名①中的所有类名②替换。
A上的控件都为B的子后代,若B上还有C控件,则C控件中也会被匹配。
和先后初始化的关系无关,主要看包含关系

3.8 并集选择器

并集选择器使用逗号,进行分割,表示两个控件使用同一样式。
如:

.QWidget , .QLabel
{
 	background-color : #ffffff;
}

3.9 子控件选择器

格式:

类型选择器::子控件{ 	background-color : #ffffff;}
类选择器::子控件{ 	background-color : #ffffff;}

比如对下拉框的设置:

  QComboBox::down-arrow:on { 
      top: 1px;
      left: 1px;
  }

3.10 伪类选择器

常见伪状态
       :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};}

4、总结

选择器 用途
通用选择器 用于给应用程序设置统一的字体、大小、颜色等。
类型选择器 常用于给控件做统一初始化。
类选择器 只对.后的类做样式处理,不匹配其派生对象。
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;
}

你可能感兴趣的:(Qt,qt5,前端,c++)