Qt是一个跨平台的C++图形用户界面应用程序开发框架,广泛应用于桌面和嵌入式系统开发。Qt Widgets是其中一个重要的模块,提供了创建经典桌面风格应用程序的基础。Qt Widgets支持样式表(Style Sheets),使开发者可以通过类似于CSS的方式对界面进行美化和定制。本文将详细介绍Qt Widgets的样式表的使用方法和技巧。
结尾附完整的样式表测试Demo代码链接…
什么是Qt Widgets样式表
Qt Widgets的样式表(Style Sheet)类似于Web开发中的CSS,可以用于控制Qt应用程序中控件的外观。通过样式表,开发者可以统一管理控件的样式,简化代码,提升开发效率。
样式表的基本语法
Qt Widgets样式表的语法与CSS非常相似,主要包括选择器、属性和属性值。下面是一个基本示例:
QPushButton {
background-color: #3498db;
color: white;
border-radius: 5px;
padding: 5px 10px;
}
QPushButton:hover {
background-color: #2980b9;
}
这个样式表为所有的QPushButton控件设置了背景颜色、文本颜色、圆角边框和内边距。当按钮被悬停时,背景颜色会发生变化。
选择器
Qt样式表中涉及的选择器介绍:
通用选择器(通配选择器)
语法
* {
background-color: red;
}
示例效果
语法解释
匹配所有QWidget类的实例对象,包含QWidget直接实例的对象和由QWidget派生类实例的对象。
一般不会用该选择器进行处理,因为其匹配的对象太多,所有按钮、QListWidget、QTreeWidget、QTableWidget等等都会被匹配。
类型选择器
语法
QWidget {
background-color: red;
}
示例效果
语法解释
匹配所有QWidget
类实例化的对象,包含由QWidget
派生类实例化的对象。
QWidget { … }
用QWidget的类型选择器和上面的通用选择器所达到的效果是一样的。
类选择器
语法
.QWidget {
background-color: red;
}
示例效果
语法解释
匹配QWidget
直接实例化的对象,由QWidget
类的派生类实例化的对象是不会被匹配上的。
属性选择器
语法
QPushButton[checkable=false] {
background-color: yellow;
}
QPushButton[checkable=true] {
background-color: blue;
}
示例效果
语法解释
匹配QPushButton
类,且checkable
属性分别为true
和false
的实例对象。
ID选择器
语法
#child_window {
background-color: red;
}
示例效果
语法解释
匹配ObjectName
为child_window
的实例对象。
后代选择器
语法
#ParentWidget QWidget {
background-color: red;
}
示例效果
示例解释
匹配ObjectName
为ParentWidget
的窗口对象中,子对象(只要是ParentWidget
的后代,无论层级)的类型为QWidget
的对象。
子选择器
语法
#ParentWidget > QWidget {
background-color: red;
}
示例效果
示例解释
在ObjectName
为ParentWidget
的窗口对象中,只匹配类型为QWidget
的直接子对象,子对象的子对象是不会被匹配的。
后代选择器和子选择器的区别就是,后代选择器是匹配所有后代,不论层级,而子选择器是只匹配子对象这一层级。
伪元素(子控件)选择器
语法
QComboBox::drop-down {
background-color: red;
}
示例效果
示例解释
匹配QComboBox
控件的伪元素对象(特定的子对象)。
伪元素列举
::add-line | 添加一行的按钮QScrollBar。 |
---|---|
::add-page | 手柄(滑块)和add-line的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 | 的凹槽QSlider。 |
::indicator | 指标QAbstractItemView, AQCheckBox, AQRadioButton,可检查QMenu项目或可检查的QGroupBox。 |
::handle | 手柄(滑块)QScrollBar, AQSplitter或QSlider。 |
::icon | 图标QAbstractItemView或QMenu。 |
::item | 一个项目QAbstractItemView, AQMenuBar, AQMenu或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 | 手柄(滑块)和sub-line的QScrollBar。 |
::tab | 标签QTabBar或者QToolBox。 |
::tab-bar | 标签栏QTabWidget。此子控件仅用于控制QTabBar在 - 的里面QTabWidget. 使用::tab子控制。 |
::tear | 泪液指标QTabBar。 |
::tearoff | 撕下指示器QMenu。 |
::text | 的文本QAbstractItemView。 |
::title | 标题QGroupBox或QDockWidget。 |
::up-arrow | 向上箭头QHeaderView(排序指示器),QScrollBar或QSpinBox。 |
::up-button | 的向上按钮QSpinBox。 |
伪状态选择器
语法
QPushButton:hover {
background-color: yellow;
}
示例效果
示例解释
匹配伪状态(悬浮状态)的按钮对象。
伪状态列举
:active | 当小部件驻留在活动窗口中时设置此状态。 |
---|---|
:adjoins-item | 此状态设置为::branch的QTreeView与某项相邻。 |
:alternate | 在绘制行时,每隔一行都会设置此状态QAbstractItemView什么时候QAbstractItemView::alternatingRowColors() 设置为 true。 |
:bottom | 该项目位于底部。例如,QTabBar其标签位于底部。 |
:checked | 该项目已选中。例如,checked的状态QAbstractButton。 |
:closable | 可以关闭这些项目。例如,QDockWidget有QDockWidget::DockWidgetClosable功能已开启。 |
:closed | 项目处于关闭状态。例如,未展开的项目位于QTreeView |
:default | 该项目是默认项目。例如,default QPushButton或默认操作QMenu。 |
:disabled | 该项目是disabled。 |
:editable | 这QComboBox是可编辑的。 |
:edit-focus | 该项目具有编辑焦点(参见QStyle::State_HasEditFocus)。此状态仅适用于Qt Extended应用程序。 |
:enabled | 该项目是enabled。 |
:exclusive | 该菜单项属于专属菜单项组。例如,专属菜单项中的菜单项QActionGroup。 |
:first | 该项目是列表中的第一个。例如,QTabBar。 |
:flat | 物品是扁平的。例如,flat QPushButton。 |
:floatable | 这些项目可以浮动。例如,QDockWidget有QDockWidget::DockWidgetFloatable功能已开启。 |
:focus | 该产品具有input focus。 |
:has-children | 该项目有子项。例如,QTreeView有子项。 |
:has-siblings | 该项目有同级项目。例如,QTreeView那个兄弟姐妹。 |
:horizontal | 该项目具有水平方向 |
:hover | 鼠标悬停在该项目上。 |
:indeterminate | 该项目处于不确定状态。例如,QCheckBox或者QRadioButton是partially checked。 |
:last | 该项目是(列表中的)最后一个项目。例如,QTabBar。 |
:left | 该项目位于左侧。例如,QTabBar其标签位于左侧。 |
:maximized | 项目已最大化。例如,最大化的QMdiSubWindow。 |
:middle | 项目位于列表的中间。例如,不在列表开头或结尾的选项卡QTabBar。 |
:minimized | 项目已最小化。例如,最小化的QMdiSubWindow。 |
:movable | 该项目可以移动。例如,QDockWidget有QDockWidget::DockWidgetMovable功能已开启。 |
:no-frame | 该项目没有框架。例如,无框架QSpinBox或者QLineEdit。 |
:non-exclusive | 该商品属于非独家商品组。例如,非独家商品组中的菜单项QActionGroup。 |
: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 | 该项目是unchecked。 |
:vertical | 該項目具有隱立方向。 |
:window | 该小部件是一个窗口(即顶级小部件) |
Demo演示
效果图
Demo说明
该Demo演示了常用控件的样式表使用方法。除了演示样式表外,该项目还包含了以下功能:
- 无边框窗口组件
- 自定义Icon字体库
链接
下面两个链接分别是github和gitee对应仓库的地址:
LeoLei8060_github
LeoLei8060_gitee