QtWidgets样式表教程(附代码)

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;
}

示例效果

image.png

语法解释

匹配所有QWidget类的实例对象,包含QWidget直接实例的对象和由QWidget派生类实例的对象。

一般不会用该选择器进行处理,因为其匹配的对象太多,所有按钮、QListWidget、QTreeWidget、QTableWidget等等都会被匹配。

类型选择器

语法
QWidget {
	background-color: red;
}

示例效果

image.png

语法解释

匹配所有QWidget类实例化的对象,包含由QWidget派生类实例化的对象。

QWidget { … }
用QWidget的类型选择器和上面的通用选择器所达到的效果是一样的。

类选择器

语法
.QWidget {
	background-color: red;
}

示例效果

image.png

语法解释

匹配QWidget直接实例化的对象,由QWidget类的派生类实例化的对象是不会被匹配上的。

属性选择器

语法
QPushButton[checkable=false] {
	background-color: yellow;
}
QPushButton[checkable=true] {
	background-color: blue;
}

示例效果

image.png

语法解释

匹配QPushButton类,且checkable属性分别为truefalse的实例对象。

ID选择器

语法
#child_window {
	background-color: red;
}

示例效果

image.png

语法解释

匹配ObjectNamechild_window的实例对象。

后代选择器

语法
#ParentWidget QWidget {
	background-color: red;
}

示例效果

image.png

示例解释

匹配ObjectNameParentWidget的窗口对象中,子对象(只要是ParentWidget的后代,无论层级)的类型为QWidget的对象。

子选择器

语法
#ParentWidget > QWidget {
	background-color: red;
}

示例效果

image.png

示例解释

ObjectNameParentWidget的窗口对象中,只匹配类型为QWidget的直接子对象,子对象的子对象是不会被匹配的。

后代选择器和子选择器的区别就是,后代选择器是匹配所有后代,不论层级,而子选择器是只匹配子对象这一层级。

伪元素(子控件)选择器

语法
QComboBox::drop-down {
	background-color: red;
}

示例效果

image.png

示例解释

匹配QComboBox控件的伪元素对象(特定的子对象)。

伪元素列举
::add-line添加一行的按钮QScrollBar
::add-page手柄(滑块)和add-lineQScrollBar
::branch的分支指示符QTreeView
::chunk进度块QProgressBar
::close-button关闭按钮QDockWidget或标签QTabBar
::corner两个滚动条之间的角QAbstractScrollArea
::down-arrow向下箭头QComboBoxQHeaderView(排序指示器),QScrollBar或者QSpinBox
::down-button的向下按钮QScrollBarQSpinBox
::drop-down下拉按钮QComboBox
::float-button浮动按钮QDockWidget
::groove的凹槽QSlider
::indicator指标QAbstractItemView, AQCheckBox, AQRadioButton,可检查QMenu项目或可检查的QGroupBox
::handle手柄(滑块)QScrollBar, AQSplitterQSlider
::icon图标QAbstractItemViewQMenu
::item一个项目QAbstractItemView, AQMenuBar, AQMenuQStatusBar
::left-arrow左箭头QScrollBar
::left-corner左角QTabWidget。例如,此控件可用于控制左角小部件在QTabWidget
::menu-arrow箭头QToolButton带有菜单。
::menu-button菜单按钮QToolButton
::menu-indicator菜单指示器QPushButton
::right-arrow右箭头QMenuQScrollBar
::pane窗格(框架)QTabWidget
::right-corner右上角QTabWidget。例如,此控件可用于控制右上角小部件在QTabWidget
::scroller的滚动条QMenu或者QTabBar
::section的部分QHeaderView
::separator分隔符QMenu或者QMainWindow
::sub-line按钮减去一行QScrollBar
::sub-page手柄(滑块)和sub-lineQScrollBar
::tab标签QTabBar或者QToolBox
::tab-bar标签栏QTabWidget。此子控件仅用于控制QTabBar在 - 的里面QTabWidget. 使用::tab子控制。
::tear泪液指标QTabBar
::tearoff撕下指示器QMenu
::text的文本QAbstractItemView
::title标题QGroupBoxQDockWidget
::up-arrow向上箭头QHeaderView(排序指示器),QScrollBarQSpinBox
::up-button的向上按钮QSpinBox

伪状态选择器

语法
QPushButton:hover {
	background-color: yellow;
}

示例效果

image.png

示例解释

匹配伪状态(悬浮状态)的按钮对象。

伪状态列举
:active当小部件驻留在活动窗口中时设置此状态。
:adjoins-item此状态设置为::branchQTreeView与某项相邻。
:alternate在绘制行时,每隔一行都会设置此状态QAbstractItemView什么时候QAbstractItemView::alternatingRowColors() 设置为 true。
:bottom该项目位于底部。例如,QTabBar其标签位于底部。
:checked该项目已选中。例如,checked的状态QAbstractButton
:closable可以关闭这些项目。例如,QDockWidgetQDockWidget::DockWidgetClosable功能已开启。
:closed项目处于关闭状态。例如,未展开的项目位于QTreeView
:default该项目是默认项目。例如,default QPushButton或默认操作QMenu
:disabled该项目是disabled
:editableQComboBox是可编辑的。
:edit-focus该项目具有编辑焦点(参见QStyle::State_HasEditFocus)。此状态仅适用于Qt Extended应用程序。
:enabled该项目是enabled
:exclusive该菜单项属于专属菜单项组。例如,专属菜单项中的菜单项QActionGroup
:first该项目是列表中的第一个。例如,QTabBar
:flat物品是扁平的。例如,flat QPushButton
:floatable这些项目可以浮动。例如,QDockWidgetQDockWidget::DockWidgetFloatable功能已开启。
:focus该产品具有input focus
:has-children该项目有子项。例如,QTreeView有子项。
:has-siblings该项目有同级项目。例如,QTreeView那个兄弟姐妹。
:horizontal该项目具有水平方向
:hover鼠标悬停在该项目上。
:indeterminate该项目处于不确定状态。例如,QCheckBox或者QRadioButtonpartially checked
:last该项目是(列表中的)最后一个项目。例如,QTabBar
:left该项目位于左侧。例如,QTabBar其标签位于左侧。
:maximized项目已最大化。例如,最大化的QMdiSubWindow
:middle项目位于列表的中间。例如,不在列表开头或结尾的选项卡QTabBar
:minimized项目已最小化。例如,最小化的QMdiSubWindow
:movable该项目可以移动。例如,QDockWidgetQDockWidget::DockWidgetMovable功能已开启。
:no-frame该项目没有框架。例如,无框架QSpinBox或者QLineEdit
:non-exclusive该商品属于非独家商品组。例如,非独家商品组中的菜单项QActionGroup
:off对于可以切换的项目,这适用于处于“关闭”状态的项目。
:on对于可以切换的项目,这适用于处于“开”状态的小部件。
:only-one该项目是(列表中)唯一的项目。例如,QTabBar
:open项目处于打开状态。例如,QTreeViewQComboBox或者QPushButton菜单打开。
:next-selected选中列表中的下一个项目。例如,选中QTabBar位于此项旁边。
:pressed正在使用鼠标按下该项目。
:previous-selected已选择列表中的上一个项目。例如,QTabBar位于所选选项卡的旁边。
:read-only该项目被标记为只读或不可编辑。例如,只读QLineEdit或不可编辑QComboBox
:right该项目位于右侧。例如,QTabBar其标签位于右侧。
:selected该项目被选中。例如,QTabBar或所选项目QMenu
:top该项目位于顶部。例如,QTabBar其标签位于顶部。
:unchecked该项目是unchecked
:vertical該項目具有隱立方向。
:window该小部件是一个窗口(即顶级小部件)

Demo演示

效果图

image.png

Demo说明

该Demo演示了常用控件的样式表使用方法。除了演示样式表外,该项目还包含了以下功能:

  1. 无边框窗口组件
  2. 自定义Icon字体库

链接

下面两个链接分别是github和gitee对应仓库的地址:
LeoLei8060_github
LeoLei8060_gitee

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值