Qt -qss样式表

1.什么是qss

qss是Qt程序界面中用来设置控件的背景图片、大小、字体颜色、字体类型、按钮状态变化等属性,用于美化UI界面。实现界面和程序的分离,快速切换皮肤。

2. 选择器类型

2.1 类选择器

// 匹配QPushButton的实例及其子类
QPushButton {
    color: blue;
}

// 匹配QPushButton的实例,但不包含子类
.QPushButton {
    color: blue;
}

2.2 选择器分组

// 同时匹配QPushButton、QLineEdit的实例
QPushButton, QLineEdit {color:blue;}

2.3 ID选择器

// 匹配所有objectName为btn的实例
*#btn {font-weight:bold;}

// 和*#btn一样,匹配所有objectName为btn的实例
#btn {font-weight:bold;}

// 匹配所有objectName为btn的QPushButton实例
QPushButton#btn {font-weight:bold;}

2.4 属性选择器

// 匹配包含flat属性的所有实例
*[flat] {color:red;}

// 匹配包含flat属性的所有QPushButton的实例
QPushButton[flat] {color:red;}

// 匹配flat属性为true的所有QPushButton的实例
QPushButton[flat="true"] {color:red;}

// 匹配falt属性为true且default属性为false的所有QPushButton的实例
QPushButton[flat="true"][default="false"] {color:red;}

2.5 后代选择器

// 匹配属于QDialog后代(孩子,孙子等)的QPushButton所有实例
QDialog QPushButton {color:red;}

2.6 子元素选择器

// 匹配属于QDialog直接子类的QPushButton所有实例
QDialog > QPushButton {color:red;}

2.7 伪状态

匹配hover状态的所有QPushButton的实例
QPushButton:hover { color: white }

匹配同时为hover和enabled状态的所有QPushButton的实例
QPushButton:hover:enabled { color: white }

匹配不为hover状态的所有QPushButton的实例
QRadioButton:!hover { color: red }

2.8 子控件选择器

QRadioButton::indicator::unchecked:disabled {
    image: url(:/qss/radiobutton.png);
}

3. 选择器优先级

优先使用更具体的选择器。

4. QSS支持的类型、属性、伪状态、子控件

Qt的官方的文档中有详细的介绍:
《Qt Style Sheets Reference》

5. 盒子模型

在使用QSS设置样式时,有一个关键的概念需要知晓,那就是“盒子模型”。
在这里插入图片描述

每个Widget都被视为具有4个同心矩形的框:

  • MARGIN矩形、BORDER矩形、PADDING矩形和CONTENT矩形,上图标注了每个矩形的区域。
  • 默认情况下MARGIN矩形、BORDER矩形、PADDING矩形的宽度都为0,这样在默认情况下,4个矩形就重合为1个CONTENT矩形了。
  • 默认情况下background-image指定的背景,只在border内的区域绘制。但我们要也可以使用background-clip或background-origin属性来更改这种默认行为。

background-image指定的背景图像无法随Widget大小自动缩放,要提供可以随Widget大小缩放的背景图像可以使用border-image和image属性,二者区别如下:

  • border-image属性指定的图像从border及其内的区域开始绘制,会导致border属性被覆盖。
  • image属性指定的图像从绘制到content区域内,image指定的url为SVG图像,则支持自动缩放,非SVG图像仅支持自动缩小。

6. Qt中样式表的属性

文本属性(Text)

属性说明
color设置文本的颜色。
direction规定文本的方向/书写方向。
letter-spacing设置字符间距。
line-height设置行高。
text-align规定文本的水平对齐方式。
text-decoration规定添加到文本的装饰效果。
text-indent规定文本块首行的缩进。
text-shadow规定添加到文本的阴影效果。
text-transform控制文本的大小写。
unicode-bidi设置文本方向。
white-space规定如何处理元素中的空白。
word-spacing设置单词间距。
hanging-punctuation规定标点字符是否位于线框之外。
punctuation-trim规定是否对标点字符进行修剪。
text-align-last设置如何对齐最后一行或紧挨着强制换行符之前的行。
text-emphasis向元素的文本应用重点标记以及重点标记的前景色。
text-justify规定当text-align设置为"justify"时所使用的对齐方法。
text-outline规定文本的轮廓。
text-overflow规定当文本溢出包含元素时发生的事情。
text-shadow向文本添加阴影。
text-wrap规定文本的换行规则。
word-break规定非中日韩文本的换行规则。
word-wrap允许对长的不可分割的单词进行分割并换行到下一行。

字体属性(Font)

属性说明
font在一个声明中设置所有字体属性。
font-family规定文本的字体系列。
font-size规定文本的字体尺寸。
font-size-adjust为元素规定 aspect 值。
font-stretch收缩或拉伸当前的字体系列。
font-style规定文本的字体样式。
font-variant规定是否以小型大写字母的字体显示文本。
font-weight规定字体的粗细。

背景属性(Background)

属性说明
background在一个声明中设置所有的背景属性。
background-attachment设置背景图像是否固定或者随着页面的其余部分滚动。
background-color设置元素的背景颜色。
background-image设置元素的背景图像。
background-position设置背景图像的开始位置。
background-repeat设置是否及如何重复背景图像。
background-clip规定背景的绘制区域。
background-origin规定背景图片的定位区域。
background-size规定背景图片的尺寸。

边框属性(Border和Outline)

属性说明
border在一个声明中设置所有的边框属性。
border-bottom在一个声明中设置所有的下边框属性。
border-bottom-color设置下边框的颜色。
border-bottom-style设置下边框的样式。
border-bottom-width设置下边框的宽度。
border-color设置四条边框的颜色。
border-left在一个声明中设置所有的左边框属性。
border-left-color设置左边框的颜色。
border-left-style设置左边框的样式。
border-left-width设置左边框的宽度。
border-right在一个声明中设置所有的右边框属性。
border-right-color设置右边框的颜色。
border-right-style设置右边框的样式。
border-right-width设置右边框的宽度。
border-style设置四条边框的样式。
border-top在一个声明中设置所有的上边框属性。
border-top-color设置上边框的颜色。
border-top-style设置上边框的样式。
border-top-width设置上边框的宽度。
border-width设置四条边框的宽度。
outline在一个声明中设置所有的轮廓属性。
outline-color设置轮廓的颜色。
outline-style设置轮廓的样式。
outline-width设置轮廓的宽度。
border-bottom-left-radius定义边框左下角的形状。
border-bottom-right-radius定义边框右下角的形状。
border-image简写属性,设置所有 border-image-*属性。
border-image-outset规定边框图像区域超出边框的量。
border-image-repeat图像边框是否应平铺(repeated)、铺满(rounded)或拉伸(stretched)。
border-image-slice规定图像边框的向内偏移。
border-image-source规定用作边框的图片。
border-image-width规定图片边框的宽度。
border-radius简写属性,设置所有四个border-*-radius属性。
border-top-left-radius定义边框左上角的形状。
border-top-right-radius定义边框右下角的形状。
box-decoration-break元素在发生断行时其样式的表现形式
box-shadow向方框添加一个或多个阴影。

外边距属性(Margin)

属性说明
margin在一个声明中设置所有外边距属性。
margin-bottom设置元素的下外边距。
margin-left设置元素的左外边距。
margin-right设置元素的右外边距。
margin-top设置元素的上外边距。

内边距属性(Padding)

属性说明
padding在一个声明中设置所有内边距属性。
padding-bottom设置元素的下内边距。
padding-left设置元素的左内边距。
padding-right设置元素的右内边距。
padding-top设置元素的上内边距。

位属性(Positioning)

属性说明
bottom设置定位元素下外边距边界与其包含块下边界之间的偏移。
clear规定元素的哪一侧不允许其他浮动元素。
clip剪裁绝对定位元素。
cursor规定要显示的光标的类型(形状)。
display规定元素应该生成的框的类型。
float规定框是否应该浮动。
left设置定位元素左外边距边界与其包含块左边界之间的偏移。
overflow规定当内容溢出元素框时发生的事情。
position规定元素的定位类型。
right设置定位元素右外边距边界与其包含块右边界之间的偏移。
top设置定位元素的上外边距边界与其包含块上边界之间的偏移。
vertical-align设置元素的垂直对齐方式。
visibility规定元素是否可见。
z-index设置元素的堆叠顺序。

Box属性

属性说明
overflow-x如果内容溢出了元素内容区域,是否对内容的左/右边缘进行裁剪。
overflow-y如果内容溢出了元素内容区域,是否对内容的上/下边缘进行裁剪。
overflow-style规定溢出元素的首选滚动方法。
rotation围绕由 rotation-point 属性定义的点对元素进行旋转。
rotation-point定义距离上左边框边缘的偏移点。

7. 伪状态列表

伪状态描述
:active当小组件驻留在活动窗口中时,将设置此状态。
:adjoins-item当 的 与项目相邻时,将设置此状态。
:alternate当 () 设置为 true 时,绘制 () 的行时,将为每个交替行设置此状态。
:bottom该项目位于底部。例如,其选项卡位于底部的 。
:checked该项目已选中。例如,的状态。
:closable可以关闭这些项目。例如,已打开该功能。
:closed项目处于关闭状态。例如,非展开项在
:default该项为默认值。例如,a 或 .
:disabled该项目是 。
:editable是可编辑的。
:edit-focus项目具有编辑焦点(请参阅)。此状态仅适用于 Qt 扩展应用程序。
:enabled该项目是 。
:exclusive该物料是独占物料组的一部分。例如,独占 .
:first该项是第一个(在列表中)。例如,.
:flat该项目是平坦的。例如,.
:floatable这些项目可以浮动。例如,已打开该功能。
:focus该项目具有 .
:has-children项目具有子项。例如,具有子项的项。
:has-siblings该项目有同级。例如,同级中的项目。
:horizontal项目具有水平方向
:hover鼠标悬停在项目上。
:indeterminate项目具有不确定状态。例如,a 或 是 。
:last该项是最后一个(在列表中)。例如,.
:left该项目位于左侧。例如,选项卡位于左侧的 。
:maximized项目最大化。例如,最大化的 .
:middle该项位于中间(在列表中)。例如,不在开头或不在结尾的制表符。
:minimized该项目已最小化。例如,最小化的 .
:movable该项目可以四处移动。例如,已打开该功能。
:no-frame项目没有框架。例如,无框或 .
:non-exclusive物料是非独占物料组的一部分。例如,非独占 .
:off对于可以切换的项目,这适用于处于“关闭”状态的项目。
:on对于可以切换的项目,这适用于处于“打开”状态的小部件。
:only-one该项是唯一的项(在列表中)。例如,.
:open项目处于打开状态。例如,打开菜单中的展开项、或 或。
:next-selected下一个项目(在列表中)被选中。例如,a 的选定选项卡位于此项目旁边。
:pressed正在使用鼠标按下该项目。
:previous-selected上一项(在列表中)处于选中状态。例如,所选选项卡旁边的选项卡。
:read-only项目标记为只读或不可编辑。例如,只读或不可编辑的 .
:right该项目位于右侧。例如,其选项卡位于右侧的 。
:selected项目处于选中状态。例如,a 中的选定选项卡或 .
:top该项目位于顶部。例如,其选项卡位于顶部的 。
:unchecked该项目是 。
:vertical该项目具有垂直方向。
:window小部件是一个窗口(即顶级小部件)

子控件列表

子控件描述
::add-line用于添加一行 .
::add-page手柄(滑块)和 之间的区域。
::branch的分支指示器。
::chunk的进度块。
::close-button的关闭按钮或选项卡
::corner两个滚动条之间的角
::down-arrow、 (排序指示器)或 的向下箭头。
::down-buttona 或 a 的向下按钮。
::drop-down.
::float-button浮动按钮
::groove一个.
::indicatora 、 a 、 、 可检查项目或可检查项目的指示符。
::handle、 或 的手柄(滑块)。
::icon或 .
::itema 、 a 、 a 或 a 的项目。
::left-arrow的左箭头。
::left-corner的左上角。例如,此控件可用于控制左上角小部件在 中的位置。
::menu-arrow带有菜单的箭头。
::menu-button的菜单按钮。
::menu-indicator的菜单指示器。
::right-arrowa 或 a 的右箭头。
::pane的窗格(框架)。
::right-corner的右上角。例如,此控件可用于控制右上角小部件在 .
::scroller或 的滚动条。
::section一节。
::separatora 或 in 中的分隔符。
::sub-line用于减去一行的按钮。
::sub-page手柄(滑块)和 之间的区域。
::tab或 的制表符。
::tab-bar的选项卡栏。此子控件的存在只是为了控制 .使用子控件设置选项卡样式。
::tear的撕裂指示器。
::tearoff的撕裂指示器。
::text的文本。
::titlea 或 a 的标题。
::up-arrow(排序指示器)的向上箭头或 .
::up-button的向上按钮。

8. 字体名

微软雅黑: Microsoft YaHei
宋体:SimSun
黑体:SimHei
仿宋: FangSong
楷体: KaiTi
隶书:LiSu
幼圆:YouYuan
华文细黑:STXihei
华文楷体:STKaiti
华文宋体:STSong
华文中宋:STZhongsong
华文仿宋:STFangsong
方正舒体:FZShuTi
方正姚体:FZYaoti

Qt的CSS/QSS帮助文档

打开Qt Assistant工具,在索引页面查找关键字:

1、“Qt Style Sheets Reference”查看Qt样式表的用法

2、“Qt Style Sheets Examples” 查看Qt样式表的实例

3、“The Style Sheet Syntax” 查看Qt样式表语法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值