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
:editable QComboBox是可编辑的。
: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. <span style='color:red;'>QWidget</span>

    QWidget

    2024-06-17 18:50:04      34 阅读
  2. Web 品质样式

    2024-06-17 18:50:04       6 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-17 18:50:04       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-17 18:50:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-17 18:50:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-17 18:50:04       20 阅读

热门阅读

  1. 喜马拉雅项目调整

    2024-06-17 18:50:04       6 阅读
  2. 胡说八道(24.6.16)——数字电子技术以及通信杂谈

    2024-06-17 18:50:04       7 阅读
  3. Docker

    2024-06-17 18:50:04       4 阅读
  4. vue中ref与$parent/$children⽗⼦组件通信例子

    2024-06-17 18:50:04       6 阅读
  5. 微信小程序的常用api

    2024-06-17 18:50:04       5 阅读
  6. 【无标题】

    2024-06-17 18:50:04       7 阅读
  7. [C语言]条件编译

    2024-06-17 18:50:04       8 阅读
  8. 敏捷测试:方法和实践

    2024-06-17 18:50:04       7 阅读
  9. Linux sudo -i取消密码的方法

    2024-06-17 18:50:04       8 阅读