Qt Style Sheet(QSS)

Qt Style Sheet(QSS)

  • 概述
  • 样式规则
  • 选择器类型
  • 子控件
  • 伪选择器
  • 冲突
  • 级联效应
  • 继承性

概述

Qt Style Sheet(简称QSS)十分强大,允许自定义控件的外观,QSS的语法重度参考了CSS的语法规则,但非完全一致。
对于QSS的设置,有两个函数

QApplication::setStyleSheet() //作用范围为整个应用程序
QWidget::setStyleSheet() //作用范围是特定控件(含子控件)

QSS是针对Qt Widgets体系的,只能在该体系下使用,不能用于Qt Quick

样式规则

QSS由一系列样式规则组成,样式规则由选择器和声明组成,其中样式指定哪些小组件受规则影响,声明指定应在小组件上设置哪些属性,如:

QPushButton{color: red}	//QPushButton是选择器,{color:red}是声明

QSS语法不分大小写,除了类名,对象名,属性名外,多个选择器可以使用相同声明,通过逗号分隔选择器,有多条声明要用分号分隔,如:

QPushButton,QLineEdit{ color:red;background-color:white}

选择器类型

选择器 示例 说明
通用选择器 * 匹配所有部件
类型选择器 QPushButton 匹配QPushButton及其子类的实例
属性选择器 QPushButton[flat = “false”] 匹配QPushButton中flat属性为false的实例
类选择器 .QPushButton 匹配QPushButton的实例,但不包含子类
id选择器 QPushButton#okbtn 匹配所有对象名为okbtn的实例
后代选择器 QDialog QPushButton 匹配属于QDialog后代的QPushButton所有实例
子选择器 QDialog > QPushButton 匹配属于QDialog直接子类的QPushButton所有实例

子控件

对于样式复杂的部件,需要访问子控件,比如QComboBox的下拉按钮,选择器可能包含子控件,我们可以指定这些选择器的子控件样式。如:

QComboBox::down-arrow {
    image: url(down_arrow.png);
}
QComboBox::down-arrow:pressed {
    position: relative;
    top: 1px; left: 1px;
}

这段代码指定了QComboBox的下拉按钮样式

伪选择器

QSS的伪状态:限制控件只能在某种状态下被样式表作用。比如鼠标按下是一种样式,鼠标悬浮在控件上是一种样式,等等。

伪状态出现在选择器后面,用冒号关联,如:
QPushButton:hover{color:red}

伪状态可以用感叹号表示否定,如:
QPushButton:!hover{color:red}

伪状态可以连接使用,如:
QPushButton:hover:pressed{color:red}

否定的伪状态可以连接使用,如:
QPushButton:hover:!pressed{color:red}

可以使用逗号操作来表示逻辑或,如:
QPushButton:hover,pressed{color:red}

伪状态可以与子控件组合,如:
QComboBox::drop-down:hover{image:url(picture.png)}

冲突

当样式中指定相同属性有不同值时,会出现冲突, 如:

QPushButton#okbtn{color:red}
QPushButton{color:blue}

因为#okbtn更具体,是指单个对象,而不是一类的所有实例了,所以#okbtn这个按钮会被设置为红色,而其他会被设置为蓝色
同样,伪状态比不指定伪状态的选择器更具体。
两个选择器有相同的特殊性时,后一条规则优先。

级联效应

冲突发生时,不论冲突规则的特殊性,部件自身的样式表总是优先于任何继承样式表

继承性

部件不会自动从父继承字体和颜色,例如,一个QGroupBox中包含QPushButton,QGroupBox设置颜色样式后,QPushButton不会继承其父QGroupBox的颜色,而是显示系统的颜色。
参考博客

你可能感兴趣的:(Qt,qt)