QT美化之QSS笔记
- Author: 浅若清风cyf
[toc]
官方文档
参考资料
- QSS - 简书 (jianshu.com)
- QSS总结以及最近做的Qt项目 - 薰衣草的旋律 - 博客园 (cnblogs.com)
- (☆☆☆)Qt Style Sheets Reference | Qt Widgets 5.15.8
一、QSS选择器
选择器类型 | 举例 | 说明 |
---|---|---|
通配选择器 | * | 匹配所有控件 |
类型选择器 | QPushButton | 匹配所有QPushButton和其子类的对象 |
属性选择器 | QPushButton[flat="flase"] | 匹配所有属性flat的值为flase的QPushButton类型对象 |
类选择器 | .QPushButton | 匹配所有QPushButton的对象,但是不匹配其子类的对象 |
ID选择器 | #myBtn | 匹配所有ID为myBtn 的控件对象,此ID为对象的objectName属性 |
后代选择器 | QDialog QPushButton | 所有QDialog容器中包含QPushButton类型的对象,不管直接或间接包含 |
子选择器 | QDialog > QPushButton | 所有QDialog容器下所有QPushButton对象,必须是直接包含 |
二、QSS属性设置
官方文档:
- 样式表属性:List of Properties
- 样式表属性可选值:List of Property Types
在QSS中设置的属性分为两种:
- 样式表的属性, 如border、border-radius、background-color等属性
- QObject系统的属性(QtDesigner中的属性/对象属性),如QLabel::alignment、QLabel::text、QLabel::wordWrap等属性,即在QObject框架中使用“Q_PROPERTY”申明的属性。
注:
- 设置QOjbect属性时,需要在属性名前面加上"qproperty-"。比如要设置QLabel::alignment属性时在QSS中需要写成
qproperty-alignment
- 如果属性有多个值组成,需要将这个值用单引号和双引号括起来
以下是使用QSS属性和QObject属性的示例。
QLabel {
border-radius: 3px;
background-color: white;
qproperty-alignment: AlignCenter; /*或者是 "AlignHCenter|AlignVCenter"*/
qproperty-text:'This is a Text Mesage';
}
三、子控件(::)
官方文档:
- 示例:下拉列表控件未展开状态下右侧的图标:
QComboBox::drop-down { image: url(dropdown.png) }
- 翻译版本:
Sub-Control | Description |
---|---|
::add-line | 用于添加 QScrollBar 行的按钮。 |
::add-page | 控点(滑块)和 QScrollBar 的附加行之间的区域。 |
::branch | QTreeView 的分支指标。 |
::chunk | QProgressBar 的进度块。 |
::close-button | QDockWidget 的关闭按钮或 QTabBar 的选项卡 |
::corner | QAbstractScrollArea 中两个滚动条之间的角 |
::down-arrow | QComboBox、QHeaderView(排序指示器)、QScrollBar 或 QSpinBox 的下拉箭头。 |
::down-button | QScrollBar 或 QSpinBox 的下拉按钮。 |
::drop-down | QComboBox 的下拉按钮。 |
::float-button | QDockWidget的浮动按钮 |
::groove | QS滑块的凹槽。 |
::indicator | QAbstractItemView、QCheckBox、QRadioButton、可检查 QMenu 项或可检查 QGroupBox 的指示器。 |
::handle | QScrollBar、QSplitter 或 QSlider 的手柄(滑块)。 |
::icon | QAbstractItemView 或 QMenu 的图标。 |
::item | QAbstractItemView、QMenuBar、QMenu 或 QStatusBar 中的项。 |
::left-arrow | QScrollBar 的左箭头。 |
::left-corner | QTabWidget 的左角。例如,此控件可用于控制 QTabWidget 中左角小部件的位置。 |
::menu-arrow | 带有菜单的 QToolButton 的箭头。 |
::menu-button | QToolButton 的菜单按钮。 |
::menu-indicator | QPushButton 的菜单指示器。 |
::right-arrow | QMenu 或 QScrollBar 的右箭头。 |
::pane | QTabWidget 的窗格(框架)。 |
::right-corner | QTabWidget 的右上角。例如,此控件可用于控制 QTabWidget 中右角小部件的位置。 |
::scroller | QMenu 或 QTabBar 的滚动条。 |
::section | QHeaderView 的一部分。 |
::separator | QMenu 或 QMainWindow 中的分隔符。 |
::sub-line | 用于减去 QScrollBar 的一行的按钮。 |
::sub-page | 控点(滑块)和 QScrollBar 子行之间的区域。 |
::tab | QTabBar 或 QToolBox 的选项卡。 |
::tab-bar | QTabWidget 的选项卡栏。此子控件仅用于控制 QTabWidget 中 QTabBar 的位置。使用 ::tab 子控件设置选项卡的样式。 |
::tear | QTabBar 的撕裂指示器。 |
::tearoff | QMenu 的撕裂指示器。 |
::text | QAbstractItemView 的文本。 |
::title | QGroupBox 或 QDockWidget 的标题。 |
::up-arrow | QHeaderView(排序指示器)、QScrollBar 或 QSpinBox 的向上箭头。 |
::up-button | QSpinBox的向上按钮。 |
四、伪状态(:)
官方文档:
- 翻译版本:
Pseudo-State | Description |
---|---|
:active | 当微件驻留在活动窗口中时,将设置此状态。 |
:adjoins-item | 当 QTreeView 的 ::分支与项目相邻时,将设置此状态。 |
:alternate | 当 QAbstractItemView::alternatingRowColors() 设置为 true 时,对于绘制 QAbstractItemView 行的每个交替行都设置此状态。 |
:bottom | 该项目位于底部。例如,其选项卡位于底部的 QTabBar。 |
:checked | 该项目已选中。例如,QAbstractButton 的已检查状态。 |
:closable | 可以关闭这些项目。例如,QDockWidget 打开了 QDockWidget::DockWidgetClosable 功能。 |
:closed | 项目处于关闭状态。例如,QTreeView 中的非展开项 |
:default | 该项目是默认项目。例如,默认 QPushButton 或 QMenu 中的默认操作。 |
:disabled | 该项目已禁用。 |
:editable | QComboBox是可编辑的。 |
:edit-focus | 该项目具有编辑焦点(请参阅 QStyle::State_HasEditFocus)。此状态仅适用于 Qt 扩展应用程序。 |
:enabled | 该项目已启用。 |
:exclusive | 该项是独占项组的一部分。例如,独占 QAction 组中的菜单项。 |
:first | 该项目是第一个(在列表中)。例如,QTabBar 中的第一个选项卡。 |
:flat | 项目是扁平的。例如,一个扁平的 QPushButton。 |
:floatable | 项目可以浮动。例如,QDockWidget 打开了 QDockWidget:😄 ockWidgetFloatable 功能。 |
: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:😄 ockWidgetMovable 功能。 |
:no-frame | 该项目没有框架。例如,无帧 QSpinBox 或 QLineEdit。 |
:non-exclusive | 物料是非独占物料组的一部分。例如,非独占 QAction 组中的菜单项。 |
:off | 对于可以切换的项目,这适用于处于"关闭"状态的项目。 |
:on | 对于可以切换的项目,这适用于处于"打开"状态的小部件。 |
: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 | 小部件是一个窗口(即顶级小部件) |