Qt-Qss笔记

6.3k words

QT使用QSS(Qt Style Sheet)来设置控件样式并进行个性化定制和界面美化。QSS的语法和CSS十分类似,都是使用选择器来配置控件属性。

QT导入QSS样式文件的方式也十分简单,只需要调用setStyleSheet进行设置:

1
2
3
4
5
QApplication app(argc, argv);
QFile qss("style.qss");
qss.open(QFile::ReadOnly);
app.setStyleSheet(qss.readAll());
qss.close();

QSS语法

QSS同CSS语法规则类似:
selector {attribute:value};
其中:

  • selector选择器:通常情况下为控件类名(如QPushButton);
  • attribute属性:待设置的样式表属性(如background-color);
  • value值:属性赋值(如rgb(40, 85, 20););
1
QPushButton { color: red }

Qt样式表通常不区分大小写(即,color、Color、color和color指的是同一属性),但是是类名、对象名和Qt属性名,它们区分大小写。

selector选择器的有多种使用方式,如下:

选择器 举例 解释
通用选择器 * 应用于QT的所有控件
类选择器1 QPushButton 只作用于QPushButton及其子类的实例
类选择器2 .QPushButton 只作用于QPushButton
组选择器 QPushButton,QComboBox 作用于QPushButton和QComboBox及其子类的实例
属性选择器 QPushButton[flat=“false”] 作用于非平面(flat=“false”)的QPushButton实例。
ID选择器 QPushButton#okButton 作用于对象名称为okButton的所有QPushButton实例。
后代选择器 QDialog QPushButton 匹配作为QDialog的子体(子级、孙级等)的所有QPushButton实例。
子选择器 QDialog > QPushButton 匹配作为QDialog的直接子级的所有QPushButton实例。
子控制 QComboBox::drop-down 要设置复杂 widget 的样式,需要访问 widget 的子控件,
如QComboBox的下拉按钮或QSpinBox的上下箭头。
选择器可以包含子控件,从而可以将规则的应用限制到特定的 widget 子控件
类伪状态 QPushButton::hover 用于设置控件在某个状态下的属性,伪状态的类型有多种,在下面介绍。

QSS伪状态

伪状态 描述
:active 此状态在widget驻留在活动窗口中时设置。
adjoins-item 此状态在QTreeView的::branch与项相邻时设置。
:alternate 当QAbstractItemView::ternatingRowColors()设置为true时,将为绘制QAbstractItemView的行时的每隔一行设置此状态。
:bottom 该项目位于底部。例如,标签位于底部的QTabBar。
:checked 该项目已选中。例如,QAbstractButton的选中状态。
:closable 这些项目可以关闭。例如,QDockWidget打开了QDockWidget::DockWidgetClosable功能。
:default 该项目为默认值。例如,QMenu中的默认QPushButton或默认操作。
:disabled 该项目已禁用。
:editable QComboBox是可编辑的。
:edit-focus 该项具有编辑焦点(请参见QStyle::State_HasEditFocus)。此状态仅适用于Qt扩展应用程序。
:enabled 该项目已启用。
:exclusive 该项目是独占项目组的一部分。例如,独占QActionGroup中的菜单项。
:first 该项目是(列表中的)第一个项目。例如,QTabBar中的第一个选项卡。
:flat 这件物品是平的。例如,平面QPushButton。
:floatable 这些项目可以浮动。例如,QDockWidget打开了QDockWidget::DockWidgetFloatable功能。
:focus 该项具有输入焦点。
:has-children 该项目具有子项。例如,QTreeView中具有子项的项。
:has-siblings 该项目有同级。例如,QTreeView中的同级项。
:horizontal 该项目具有水平方向
:hover 鼠标悬停在该项目上。
:indeterminate 该项具有不确定状态。例如,部分选中QCheckBox或QRadioButton。
:last 该项是(列表中的)最后一项。例如,QTabBar中的最后一个选项卡。
:left 该项目位于左侧。例如,选项卡位于左侧的QTabBar。
:maximized 该项目将最大化。例如,最大化的QMdiSubWindow。
:middle 项目在中间(在列表中)。例如,QTabBar中不在开头或结尾的制表符。
:minimized 该项目被最小化。例如,最小化的QMdiSubWindow。
:movable 物品可以四处移动。例如,QDockWidget打开了QDockWidget::DockWidgetMoovable功能。
:no-frame 该项目没有框架。例如,无框架的QSpinBox或QLineEdit。
:non-exclusive 该项是非独占项组的一部分。例如,非独占QActionGroup中的菜单项。
:off 对于可以切换的项目,这适用于处于“关闭”状态的项目。
:on 对于可以切换的项目,这适用于处于“打开”状态的widget。
:only-one 该项目是(列表中的)唯一项目。例如,QTabBar中的一个单独的选项卡。
:open 该项目处于打开状态。例如,QTreeView中的展开项,或具有打开菜单的QComboBox或QPushButton。
:next-selected 选择下一项(在列表中)。例如,QTabBar的选定选项卡紧挨着该项。
:pressed 正在使用鼠标按下该项。
:previous-selected 选择上一项(在列表中)。例如,QTabBar中选定选项卡旁边的选项卡。
:read-only 该项目标记为只读或不可编辑。例如,只读QLineEdit或不可编辑的QComboBox。
:right 该项目位于右侧。例如,选项卡位于右侧的QTabBar。
:selected 该项目即被选中。例如,QTabBar中的选定选项卡或QMenu中的选定项目。
:top 该项目位于顶部。例如,选项卡位于顶部的QTabBar。
:unchecked 该项目处于取消选中状态。
:vertical 该项目具有垂直方向。
:window widget是窗口(即顶层小部件)

QSS属性

背景属性(Background)

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

边框属性(Border 和 Outline)

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

Box 属性

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

字体属性(Font)

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

外边距属性(Margin)

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

内边距属性(Padding)

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

定位属性(Positioning)

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

文本属性(Text)

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

颜色透明程度

<!--100% —FF-->  
<!--95% — F2-->  
<!--90% — E6-->  
<!--85% — D9-->  
<!--80% — CC-->  
<!--75% — BF-->  
<!--70% — B3-->  
<!--65% — A6-->  
<!--60% — 99-->  
<!--55% — 8C-->  
<!--50% — 80-->  
<!--45% — 73-->  
<!--40% — 66-->  
<!--35% — 59-->  
<!--30% — 4D-->  
<!--25% — 40-->  
<!--20% — 33-->  
<!--15% — 26-->  
<!--10% — 1A-->  
<!--5% — 0D-->  
<!--0% — 00-->  
Comments