Qt样式表(Qt Style Sheets, QSS)是一种类似于CSS(层叠样式表)的声明性语言,用于定制Qt应用程序的用户界面。以下是Qt样式表的主要编写规则:
一、样式规则
每个样式规则由选择器和声明组成。
- 选择器:指定哪些控件(或小部件)受该规则影响。
- 声明:指定这些控件上要设置的属性及其值。声明部分是一些“属性: 值”对组成的列表,它们包含在{}中,使用分号(;)隔开。
例如:
QPushButton { color: red }
在这个例子中,QPushButton
是选择器,{ color: red }
是声明部分。这表示所有QPushButton
控件的前景色将设置为红色。
二、选择器类型
Qt样式表支持多种选择器类型,包括:
- 类型选择器:根据控件的类型来选择,如
QPushButton
、QLineEdit
等。 - 类选择器:使用
.
前缀来选择具有特定类名的控件。注意,这里的类名与Qt对象中的类名不同,它需要在Qt Designer中或通过代码为控件设置。 - ID选择器:使用
#
前缀来选择具有特定objectName的控件。每个QObject类及其派生类都有一个objectName属性,可以通过设置这个属性来为控件指定一个唯一的ID。 - 后代选择器:使用空格分隔的选择器来选择某个控件的后代控件。例如,
QWidget QPushButton
会选择所有QWidget
控件中的QPushButton
控件。 - 子元素选择器:使用
>
来选择直接子元素。例如,QWidget > QPushButton
会选择所有QWidget
的直接子控件QPushButton
。 - 属性选择器:根据控件的属性及属性值来选择控件。例如,
[readOnly="true"]
会选择所有readOnly属性为true的控件。
三、伪状态
伪状态允许开发者根据控件的特定状态来应用不同的样式规则。这些状态描述了控件在特定情况下的外观,如鼠标悬停、选中、禁用等。伪状态出现在选择器的末尾,通过冒号(:)进行标记。
例如:
QPushButton:hover { background-color: darkblue }
这表示当鼠标悬停在QPushButton
控件上时,其背景色将变为深蓝色。
四、设置子控件
对于一些复杂的控件,可能需要访问其子控件来设置样式。例如,QComboBox
的下拉按钮或QSpinBox
的上下调节按钮等。可以使用子控件选择器来设置这些子控件的样式。
例如:
QComboBox::drop-down { image: url(dropdown.png) }
这表示将QComboBox
的下拉按钮的样式设置为指定的图片。
五、样式表的继承与优先级
- 继承:在Qt中,样式表具有继承关系。如果一个父控件设置了样式表,那么其所有子控件将默认继承这些样式,除非子控件显式地覆盖了这些属性。
- 优先级:当多个样式规则对一个属性指定了不同的值时,会产生冲突。Qt样式表的优先级规则由选择器的具体性、样式表加载的顺序以及内联样式等因素共同决定。更具体的选择器(如ID选择器、类选择器)比通用选择器具有更高的优先级。带有伪状态的选择器比不带伪状态的选择器具有更高的优先级。直接在控件的
setStyleSheet()
方法中设置的样式表具有最高的优先级。
六、盒子模型
在使用样式表时,每个控件都可以看作是一个拥有四个同心矩形的盒子模型。这四个矩形分别为内容(content)、填衬(padding)、边框(border)和边距(margin)。通过样式表可以设置这些属性的值来改变控件的布局和外观。
综上所述,Qt样式表提供了一种强大而灵活的方式来定制Qt应用程序的用户界面。通过掌握样式表的编写规则,开发者可以轻松地创建出美观且一致的用户界面。