qt样式表qss选择器

news2024/11/25 22:45:55

目录

1、通用选择器

2、类型选择器(类和子类)

3、类选择器

4、ID选择器

5、子孙后代控件选择器

6、子后代控件选择器

7、属性选择器

7.1 静态属性

 7.2 动态属性

8、子控件选择

9、伪状态选择


在开始之前,先要区分3个概念:子类、子控件、后代控件

子类是具备继承关系的类:如MyWidget: public QWidget

子控件是聚合在一起的大控件中的一小部分,如下拉列表控件中有个下拉箭头,这个箭头就是子控件(sub-control)

后代控件是在界面上有父子关系的控件,如在QWidget中放置了一个QPushButton按钮,这个按钮就是QWidget的后代控件(Descendant control)

实际上,这个Descendant control翻译成子控件、子孙控件也很贴切,但是由于中英文词汇并不是一一对应的,这就和sub control的中文翻译冲突了,为了阅读本文不至于引起歧义,这里就把Descendant control翻译为后代控件。

还有一个难翻译的词是type和class。因为我们经常把class翻译为类或类型,但type翻译也是类型。为了不引起歧义,在本文中,type翻译为类型,class翻译为类。

为了便于讲述,先定义一个类型,它公开继承QPushButton,如下:

MyButton: public QPushButton

本文由【暴躁的野生猿】发表于CSDN,如有非法转载请帮忙举报谢谢。

百度搜索 【CSDN 暴躁的野生猿】可找到原文。

 所谓【样式表 选择器】,就是控制样式表所作用于的控件范围。

直接在帮助文件中搜索style sheet syntax,然后找到下图的Selector选择器章节:

1、通用选择器

就是一个*号,可匹配所有控件

2、类型选择器(类和子类)

可选中某类及其继承的子类,如

QPushButton可以匹配QPushButton和MyButton类的所有控件

3、类选择器

类名完全匹配,前面加个小数点,如

.QPushButton仅选择QPushButton类的控件,不选择MyButton类的控件,即使MyButton是继承自QPushButton。

等价于*[class~="QPushButton"]

4、ID选择器

语法1:类名#对象名

语法2:类名#对象1名,#对象2名,#对象3名

语法3:#对象名

语法4:#对象1名,#对象2名,#对象3名

类名和对象名(变量名)完全匹配才被选中,如:

QPushButton#okButton,仅选中变量名为okButton且类型为QPushButton的控件;

如果某个MyButton的名字名字也是okButton,因为MyButton类也是QPushButton类。

如果某个QToolButton的名字也是okButton,不选中,因为QToolButton不是QPushButton的子类。

5、子孙后代控件选择器

语法:父子类之间加空格

界面上具备子孙关系的控件,如

QDialog QPushButton,可选择所有被放置在QDialog中的QPushButton,不论这个QPushButton是子,还是孙,还是孙孙。。。

6、子后代控件选择器

语法:父子类之间加大于号

QDialog > QPushButton

可选择以QDialog为父控件的QPushButton。

7、属性选择器

语法: 类名[属性名=属性值],选中属性值等于某值的某类控件,如:

QCheckBox[checked="false"],选择所有未被勾选的CheckBox。

7.1 静态属性

不同类型的控件,支持的属性不同。具体这些控件有哪些属性,属性的值可以等于多少,可以通过查询该类及其父类、祖父类....的Properties章节来获得。如下图所示。

除了这些QT自带的属性,我们自定义的类中如果有自定义的静态属性,如

Q_PROPERTY(QColor borderColor READ getBorderColor WRITE setBorderColor)

也可以支持样式表

C++中我们自定义的属性名在QSS中对应属性名需要加前缀qproperty-,如C++中的borderColor属性对应QSS中的qproperty-borderColor属性。

细节可阅读官方描述:

 7.2 动态属性

 除了QT自带的静态属性、我们自定义的静态属性外,还支持动态属性。

所谓动态属性,就是没有使用Q_PROPERTY宏声明过的属性。

动态属性可以直接通过接口进行设置:

bool QObject::setProperty(const char *name, const QVariant &value)。

下面来个实际例子,在本文图1中,“Customizing Using Dynamic Properties”超链接中给出了一个使用动态属性配合样式表的例子。

对于一个QLineEdit输入框,如果这是一个必填项,一般程序员会把这个输入框的背景设置为黄色以便提醒用户。

这种场景可以这么写:

QLineEdit *edit = new QLineEdit(“please input password”);

edit ->setProperty(“force”, “1”)。这行代码中,我们定义了一个动态属性,名字叫force,并赋值为1。

在样式表中,QLineEdit [force=1]{background-color: yellow } 语句就可以选中这个force值为1的输入框。

需要注意的是,如果程序运行时,我们修改了force的值:edit ->setProperty(“force”, “0”),需要调用一下polish来重新载入样式表获得界面刷新。

 edit->style()->polish(edit)

8、子控件选择

这个东西一般出现在下拉列表控件中,例如下拉列表一般有个下拉箭头按钮,这个按钮就是子控件。点击下拉箭头以后,会展开一个菜单界面,这个菜单也叫子控件。

语法:类名::子控件名    就是加个双冒号

 QComboBox::down-arrow { mage: url(down_arrow.png);}  选择下拉列表控件的下拉箭头控件

QComboBox::drop-down { subcontrol-origin: margin; } 选择下拉列表控件的下拉出的菜单界面

9、伪状态选择

状态这个词就是字面意思,代表控件的状态。如鼠标悬浮在控件上就是一种状态,按钮被按下也是一种状态。

语法支持and和not操作,例如:

 QPushButton:hover:!pressed { color: blue; } 代表鼠标悬浮在按钮上,且没有被按下时

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android MediaPlayer多次Seek产生杂音优化

前言 MediaPlayer 作为Android自带的Player目前还是存在很多不好使用问题,但实际开发中,还是有不少使用场景,本文针对多次seek产生杂音的问题进行分析讨论,自己遇到了进行记录,目前底层也不好解决和轻易改动原生代码&…

2020年CSP-J认证 CCF非专业级别软件能力认证第一轮真题-单项选择题解析

2020 CCF认证第一轮(CSP-J)真题 一、单项选择题 (共15题,每2分,共30分;每题有且有一个正确选项) 1、在内存储器中每个存储单元都被赋予一个唯一的序号,称为 A、下标 B、序号 C、地址 D、编号 答案:C…

当618成“抢人大战”,知道“怎么抢”才能“抢得到”

文 | 螳螂观察 作者 | 易不二 今年618对很多平台来说都意义非凡。 尤其是最具主场优势的阿里、京东而言,更是一场硬仗:阿里“16N”组织架构调整后,淘天的第一次大促,且还恰逢也淘宝20周年;京东换帅、CEO许冉第一次接…

华为OD机试真题 Java 实现【素数伴侣】【2023 B卷 100分】,附详细解题思路

一、题目描述 若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如2和5、6和13,它们能应用于通信加密。现在密码学会请你设计一个程序,从已有的 N ( N 为偶数)个正整数中挑选出若干对组成“素数伴…

13.常用类|Java学习笔记

文章目录 包装类包装类型和String类型的相互转换Integer类和Character类的常用方法Integer创建机制&面试题 String类创建String对象的两种方式和区别字符串的特性String类的常用方法 StringBuffer类String和StringBuffer相互转换StringBuffer常用方法 StringBuilder类Strin…

Java实训日志01

文章目录 一、安装录屏软件(一)下载软件(二)安装软件 二、使用录屏软件三、安装XMind软件(一)下载XMind软件(二)安装XMind软件 四、创建思维导图(一)启动XMin…

如何评价广告营销效果

广告营销的目的 广义上的营销,2个主要目的:达成销售和建设品牌,其实后者的终极目的还是前者。销售是短期达成,品牌建设是长期管理。 广告是营销的一部分,广告的效果评估也应该从目的出发探寻方法。 网络广告的特性 网…

2023Fiddler学习笔记 -- 状态栏及辅助选项卡

接上节课内容 2023Fiddler抓包学习笔记 -- 环境配置及工具栏介绍 2023Fiddler抓包学习笔记 -- 如何在会话窗口添加ip列 一、状态栏 1、上面黑色的框框,可以输入相关命令实现操作,比如:bpu baidu,只要url里包含baidu的网站都会被…

Socket 传情:用 Python 编织 TCP 网络

文章目录 参考描述TCP 服务器端与 TCP 客户端通信的基本流程服务器端客户端 使用 socket 实现 TCP 服务器端实现监听套接字socket.socket()Socket().bind()IP 地址的选择本地回环地址某一特定 IP 地址空字符串 Socket().listen()监听套接字的实现 实现连接套接字Socket().accep…

【I2C】Linux使用GPIO模拟I2C

文章目录 1. I2C GPIO系统架构简介2. 如何使能I2C GPIO驱动2.1 config配置2.2 dts配置2.3 测试验证 3. 简单分析i2c-gpio.c驱动3.1 解析设备树3.2 配置SDA和SCL3.3 注册到i2c-algo-bit.c 4. 简单分析i2c-algo-bit.c驱动4.1 提供I2C通信时的算法4.2 注册Adapter 5. 参考资料 1. …

翻车了,被读者找出 BUG

大家好呀,我是小楼。 本文是上篇文章《使用增强版 singleflight 合并事件推送,效果炸裂!》的续集,没看过前文必须要先看完才能看本文,实在不想看,拉到文章末尾,给我点个赞再退出吧~Doge 上篇文…

如何进行App性能测试?SoloPi是最佳选择!

目录 引言 SoloPi简介 SoloPi特点 SoloPi的主要功能 下载SoloPi 安装SoloPi 使用SoloPi进行性能测试 性能数据查看与记录 环境加压 响应耗时计算工具 注意事项 Solopi提供的各项性能指标介绍 引言 大家好!我是凡哥。 今天我想跟你们分享一下如何进行A…

Python的接口自动化-读写excel文件

目录 引言 一、xlrd、xlwt以及xlutils安装 二、xlrd操作excel文件的数据读取 三、xlwt向excel文件写入数据 四、xlutils操作excel文件 五、封装操作excel读和写的类 引言 使用python进行接口测试时常常需要接口用例测试数据、断言接口功能、验证接口响应状态等&#xff0…

Mysql升级8.0后日期类型兼容性问题

背景 最近对原有项目数据库进行升级,从MySQL 5.7 升级到8.0,因此项目种的驱动程序也要做相应升级。 问题 一、 升级后报:java.time.LocalDateTime cannot be cast to java.util.Date 该问题是因为代码中使用Map类型获取查询返回值&#xf…

lightdb检测不兼容工具CheckUnsupportOracle使用说明

oracle有很多特性在lightdb无法使用,使用该工具可以即时扫描某个在线数据库或本地文件夹中有哪些不兼容特性,-a -x对oracle不兼容特性有所区别,扫描范围可参考后续表格。 0、使用限制 默认扫描存储过程,函数及包默认仅支持oracl…

19JS10——预解析

文章目录 一、预解析二、变量预解析和函数预解析三、预解析案例1、案例1:结果是几?2、案例2:结果是几?3、案例3:结果是几?4、案例4:结果是几? 目标: 1、预解析 2、变量预…

电脑连上wifi但显示无网解决方案分享,轻松搞定电脑上网问题

有的时候我们会遇到这样的问题:电脑明明连接了网络但仍不能上网,并且出现错误提示“WiFi已连接但没有互联网”。遇到这种情况,我们可以先使用另一台设备访问网络,看看你能否正常上网。如果也不能上网,可以尝试重新启动…

七牛云存储开启referer防盗链后,微信小程序访问提示403

点击七牛云存储存储桶绑定的加速域名 配置站点域名和微信小程序域名 是否允许空Referer一定要打开,否则小程序上的视频或图片访问时将提示403

# 如何在Git上更改本地分支名称和远程分支名称

有时候我们需要修改git分支名称,例如不合理的分支名称。本篇文章分享了如何轻松地修改Git本地分支名称和修改远程分支名称。 在Git中,通常使用分支来使开发与您的主要工作流程分开。在软件工程团队中,通常要实施特定的工作流程。例如&#x…

[C语言实现]数据结构之《关于我转生成队列这档事》

🥰作者: FlashRider 🌏专栏: 数据结构 🍖知识概要:详解队列的概念、顺序队列和链式队列的优点和缺点,以及代码实现。 目录 什么是队列? 选择什么结构来实现队列? 链式队列的实现 队列的结构…