QT使用QSS(Qt Style Sheet)
来设置控件样式并进行个性化定制和界面美化。QSS的语法和CSS十分类似,都是使用选择器来配置控件属性。
QT导入QSS样式文件的方式也十分简单,只需要调用setStyleSheet
进行设置:
1 | QApplication app(argc, argv); |
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-->