【Qt开发流程】之样式表

概述

Qt样式表是一种基于CSS的技术,可以用于自定义Qt界面的外观和行为。使用样式表可以更改Qt控件的背景、前景、边框、字体、大小、位置等属性,从而实现个性化的用户界面设计。

使用样式表可以通过集中式的方式管理和维护UI界面,而不需要修改每个控件的属性。这样可以提高开发效率,并且使应用程序的外观更加统一。

样式表还支持基于状态的样式(例如悬停、选中等),可以根据用户交互动作自动应用不同的样式。

使用Qt样式表需要一定的CSS基础,例如用于选择器的语法、样式属性和值等。Qt样式表还支持一些专用的选择器和属性,例如使用QStyleSheet来控制文本格式、QPalette来控制颜色、QStyleOption来控制绘制样式等。

使用代码设置样式表

通过使用setStyleSheet()函数,可以将CSS样式表应用于控件。注意,CSS样式表必须用双引号括起来。

// 设置一个QPushButton的样式
QPushButton* button = new QPushButton("Click me");
button->setStyleSheet("QPushButton {""background-color: #4CAF50; /* Green */""border: none;""color: white;""padding: 15px 32px;""text-align: center;""text-decoration: none;""display: inline-block;""font-size: 16px;""font-weight: bold;""}");// 设置一个QLineEdit的样式
QLineEdit* lineEdit = new QLineEdit();
lineEdit->setStyleSheet("QLineEdit {""background-color: #f2f2f2;""border: 1px solid grey;""border-radius: 4px;""padding: 6px;""}");// 设置一个QLabel的样式
QLabel* label = new QLabel("Hello World!");
label->setStyleSheet("QLabel {""color: #1e90ff;""font-size: 24px;""font-weight: bold;""}");

在这里插入图片描述
如果这样设置:

    // 设置一个QLabel的样式setStyleSheet("QLabel {""color: #1e90ff;""font-size: 24px;""font-weight: bold;""}");

则是在其类内所有的QLabel对象都会被应用此样式:
在这里插入图片描述

使用设计师设置样式

在这里插入图片描述
在某一控件上设置样式表:
在这里插入图片描述
在类中设置样式表:
在这里插入图片描述

Qt样式表语法

Qt样式表术语和语法规则几乎与HTML CSS相同。
样式表由一系列样式规则组成。样式规则由选择器和声明组成。选择器指定受规则影响的小部件;声明指定应该在小部件上设置哪些属性。例如:

QPushButton { color: red }

在上面的样式规则中,QPushButton是选择器,{color: red}是声明。该规则指定QPushButton和它的子类(例如,myppushbutton)应该使用红色作为它们的前景色。
Qt样式表通常是不区分大小写的(即,color, color, color和color指的是同一个属性)。唯一的例外是类名、对象名和Qt属性名,它们是区分大小写的。
可以为同一声明指定多个选择器,使用逗号(,)分隔选择器。例如,规则

QPushButton, QLineEdit, QComboBox { color: red }

相当于以下三条规则::

  QPushButton { color: red }QLineEdit { color: red }QComboBox { color: red }

样式规则的声明部分是一个属性值对列表,用大括号({})括起来,并用分号分隔。例如:

  QPushButton { color: red; background-color: white }

选择器类型

以上的所有示例都使用了最简单的选择器类型,即type selector。Qt样式表支持CSS2中定义的所有选择器。
下表总结了最常用的选择器类型。

选择器举例解释
Universal Selector*匹配所有小部件。
Type SelectorQPushButton匹配QPushButton及其子类的实例。
Property SelectorQPushButton[flat=“false”]匹配非平面的QPushButton实例。您可以使用此选择器来测试支持QVariant::toString()的任何Qt属性(详细信息请参阅toString()函数文档)。此外,还支持特殊的class属性,用于类的名称。 此选择器也可用于测试动态属性。有关使用动态属性自定义的详细信息,请参阅使用动态属性自定义。 除了=之外,你还可以使用~=来测试QStringList类型的Qt属性是否包含给定的QString。警告:如果Qt属性的值在样式表设置后发生变化,可能需要强制样式表重新计算。实现这一点的一种方法是取消对样式表的设置,然后重新设置。
Class Selector.QPushButton匹配QPushButton的实例,但不匹配它的子类。这相当于*[class~=“QPushButton”]。
ID SelectorQPushButton#okButton匹配对象名称为okButton的所有QPushButton实例。
Descendant SelectorQDialog QPushButton匹配QPushButton的所有实例,这些实例是QDialog的后代(子、孙子等)。
Child SelectorQDialog > QPushButton匹配QPushButton的所有实例,它们是QDialog的直接子类。

子控件

对于样式化复杂的小部件,有必要访问小部件的子控件,例如QComboBox的下拉按钮或QSpinBox的上下箭头。选择器可能包含子控件,从而可以将规则的应用限制到特定的小部件子控件。例如:

 QComboBox::drop-down { image: url(dropdown.png) }

上面的规则样式化了所有qcombobox的下拉按钮。尽管双冒号(::)语法让人想起CSS3的伪元素,Qt子控件在概念上与它们不同,并且具有不同的级联语义。
子控件总是相对于另一个元素——参考元素——进行定位。这个引用元素可以是小部件或另一个子控件。例如,QComboBox的::下拉框默认放置在QComboBox的Padding矩形的右上角。默认情况下,下拉框被放置在::下拉子控件的Contents矩形的中央。请参阅下面的可修饰小部件列表,了解用于修饰小部件及其默认位置的子控件。
可以使用subcontrol-origin属性更改要使用的原点矩形。例如,如果想将下拉框放置在QComboBox的边距矩形中,而不是默认的填充矩形中,可以如下设置:

  QComboBox {margin-right: 20px;}QComboBox::drop-down {subcontrol-origin: margin;}

伪状态

选择器可能包含伪状态,这些伪状态表示基于小部件的状态限制规则的应用。伪状态出现在选择器的末尾,中间有一个冒号(😃。例如,当鼠标悬停在QPushButton上时,以下规则适用:

  QPushButton:hover { color: white }

伪状态可以使用感叹号运算符予以否定。例如,当鼠标未悬停在QRadioButton上时,适用以下规则:

  QRadioButton:!hover { color: red }

结论

多么有趣的灵魂啊

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/267028.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu18.04配置cuda+cudnn+tensorrt+anconda+pytorch-gpu+pycharm

一、显卡驱动安装 执行nvidia-smi查看安装情况 二、cuda安装 cuda官网下载cuda_11.6.2_510.47.03_linux.run,安装执行 sudo sh cuda_11.6.2_510.47.03_linux.run提升安装项,驱动不用安装,即第一项(Driver)&#xff…

c语言插入排序及希尔排序详解

目录 前言: 插入排序: 希尔排序: 前言: 排序在我们生活中无处不在,比如学生成就排名,商品价格排名等等,所以排序在数据结构的学习中尤为重要,今天就为大家介绍两个经典的排序算法&…

day33-37-SpringBootV12(整合Spring,SpringMVC,Mybatis,日志,api测试等框架)

ssm spring --> applicationContext.xml配置文件 springmvc --> springmvc.xml配置文件 mybatis —> mybatis-config.xml配置文件 —> springboot优化了之前的框架配置,思想是约定大于配置 一、引言 1.1 初始化配置 为了使用SSM框架去开发,准备SSM…

https 协议

目录 加密方式 对称加密 非对称加密 非对称加密 非对称加密 非对称加密 对称加密 AC证书 AC证书内容 数据摘要 数据签名 在我们前面学习的http协议里面,我们发送的内容都是明文传输的,所以在安全上并不安全,但是在现在信息发达的时…

kafka学习笔记--broker工作流程、重要参数

本文内容来自尚硅谷B站公开教学视频,仅做个人总结、学习、复习使用,任何对此文章的引用,应当说明源出处为尚硅谷,不得用于商业用途。 如有侵权、联系速删 视频教程链接:【尚硅谷】Kafka3.x教程(从入门到调优…

ISNAS-DIP: Image-Specific Neural Architecture Search for Deep Image Prior

ISNAS-DIP:用于深度图像先验的图像特定神经架构搜索 论文链接:https://arxiv.org/abs/2111.15362v2 项目链接:https://github.com/ozgurkara99/ISNAS-DIP Abstract 最近的研究表明,卷积神经网络(CNN)架构在频谱上偏向较低频率&…

用23种设计模式打造一个cocos creator的游戏框架----(十三)模板方法模式

1、模式标准 模式名称:模板方法模式 模式分类:行为型 模式意图:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。Template Method 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 结构图&#xff1a…

【BI】FineBI功能学习路径-20231211

FineBI功能学习路径 https://help.fanruan.com/finebi/doc-view-1757.html 编辑数据概述 1.1 调整数据结构 1.2 简化数据 2.1上下合并 2.2其他表添加列 2.3左右合并 新增分析指标 函数参考 https://help.fanruan.com/finereport/doc-view-1897.html 数值函数 日期函数 文…

深入探索 Spring Boot:简化开发,加速部署的全方位利器

目录 导言 1. 自动配置(Auto-Configuration) 2. 起步依赖(Starter Dependencies) 3. 嵌入式 Web 服务器 4. Actuator 5. 外部化配置 6. 简化的安全性配置 7. Spring Boot CLI 8. Spring Boot DevTools 导言 在当今软件开…

【JVM从入门到实战】(一) 字节码文件

一、什么是JVM JVM 全称是 Java Virtual Machine,中文译名 Java虚拟机。 JVM 本质上是一个运行在计算机上的程序,他的职责是运行Java字节码文件。 二、JVM的功能 解释和运行 对字节码文件中的指令,实时的解释成机器码,让计算机…

【LeetCode每日一题】2270.分割数组的方案数

https://leetcode.cn/problems/number-of-ways-to-split-array/description/ 题目: 给定一个数组,从 下标为 index 的地方切开,左边的数大于右边,保证右边至少有一个数。 思路一: 遍历数组,用prefixArr …

论文笔记:A review on multi-label learning

一、介绍 传统的监督学习是单标签学习,但是现实中一个实例可能对应多个标签。这篇文章介绍了多标签分类的定义和评价指标、多标签学习的算法还有其他相关的任务。 二、问题相关定义 2.1 多标签学习任务 假设 X R d X R^d XRd,表示d维的输入空间&am…