Qt之QSS使用与基本语法

article/2025/9/28 23:26:31

一、QSS介绍

QSS是一种从CSS借鉴过来的机制,用来实现对控件外观的自定义。但是它比CSS功能要弱化一些,有一些属性和选择器,QSS并没有。
Qt中的各个控件可以使用QSS来实现界面的个性化定制、美化,使用起来也是特别方便的。

二、QSS使用与语法

我们接下来以一个简单地例子来,说明怎么使用qss修改界面外观。

1、举个栗子

设置QLineEdit控件背景色为黄色。

qApp->setStyleSheet("QLineEdit { background-color: yellow; }");

效果:在这里插入图片描述

其中QLineEdit表示选择器,background-color表示属性,yellow表示值。

每个qss样式都有下面的形式:

selector { attribute: value }

2、选择器

(1)通用选择器

“*”,匹配所有控件(QWidget):

qApp->setStyleSheet("* { background-color: yellow; }");

主窗口与QLineEdit背景色均为黄色。
在这里插入图片描述

(2)类型选择器

"类名"作为选择器,作用于本类及其子类:

QLineEdit* lineEdit = new QLineEdit(ui->centralWidget);
MyLineEdit* myLineEdit = new MyLineEdit(ui->centralWidget);
qApp->setStyleSheet("QLineEdit { background-color: yellow; }");

QLineEdit与子类MyLineEdit颜色均为黄色。

在这里插入图片描述

(3)类选择器

".+类名"作为选择器,仅作用于本类

qApp->setStyleSheet(".QWidget { background-color: yellow; }");

QWidget类型centralWidget为黄色,QLineEdit不变。
在这里插入图片描述

疑问:像上面这样指定QWidget,QLineEdit不会受影响;但是自己从QLineEdit上派生出MyLineEdit类,此时使用

qApp->setStyleSheet(".QLineEdit { background-color: yellow; }");

结果MyLineEdit与QLineEdit均变为黄色,应该是哪里没对??

“. + class的属性值” 作为选择器

先定义qss样式,然后setProperty()设置"class"属性值为"xxx"。

qApp->setStyleSheet(".test { background-color: yellow; }");
lineEdit->setProperty("class",  "test");

在这里插入图片描述

(4)ID选择器

“# + objectName” 作为选择器,只作用于此objectName对象;#前面可加类名,也可省略。

lineEdit1->setObjectName(QString::fromUtf8("lineEdit1"));
lineEdit2->setObjectName(QString::fromUtf8("lineEdit2"));
qApp->setStyleSheet("#lineEdit1 { background-color: yellow; }""#lineEdit2 { background-color: red; }");

lineEdit1->setObjectName(QString::fromUtf8("lineEdit1"));
lineEdit2->setObjectName(QString::fromUtf8("lineEdit2"));
qApp->setStyleSheet("QLineEdit#lineEdit1 { background-color: yellow; }""QLineEdit#lineEdit2 { background-color: red; }");

在这里插入图片描述

多个控件样式一样,也可以连用,以","分割:

qApp->setStyleSheet("#lineEdit1, #lineEdit2 { background-color: green; }");

qApp->setStyleSheet("QLineEdit#lineEdit1, QLineEdit#lineEdit2 { background-color: green; }");

在这里插入图片描述

(5)属性选择器

"类名[属性=‘值’]"作为选择器,值一定是字符串。

qApp->setStyleSheet("QLineEdit[bkColor='red'] { background-color: red; }""QLineEdit[bkColor='green'] { background-color: green; }");
lineEdit1->setProperty("bkColor", "red"); // 显示红色样式
lineEdit2->setProperty("bkColor", "green"); // 显示绿色样式

在这里插入图片描述

(6)包含选择器

"父控件类型 子控件类型"作为选择器,选择器之间用空格隔开;作用于父控件下所有指定类型直接和间接子控件。

QLineEdit* lineEdit1 = new QLineEdit(ui->centralWidget);
QWidget* widget = new QWidget(ui->centralWidget);
QLineEdit* lineEdit2 = new QLineEdit(widget);
ui->centralWidget->setStyleSheet("QWidget QLineEdit { background-color: red; }");

lineEdit1为ui->centralWidget的子控件,lineEdit2是ui->centralWidget的孙子控件,故两者都为红色。

在这里插入图片描述

(7)子元素选择器

"父控件 > 子控件"作为选择器,作用于父控件下所有指定类型直接子控件。与包含选择器的区别是否作用于间接子控件。

QLineEdit* lineEdit1 = new QLineEdit(ui->centralWidget);
QLineEdit* lineEdit2 = new QLineEdit(this);
this->setStyleSheet("QMainWindow > QLineEdit { background-color: red; }");

lineEdit1位于QMainWindow->centralWidget下,lineEdit2 位于QMainWindow下,故QMainWindow直接子控件lineEdit2变为红色,间接子控件lineEdit1无变化。
在这里插入图片描述

(8)伪类选择器

"选择器:状态"作为选择器,状态支持!操作符,表示取非。

QPushButton* btn = new QPushButton("test1", ui->centralWidget);
btn->setStyleSheet("QPushButton:pressed { color: red; }""QPushButton:!pressed { color: green; }");

在这里插入图片描述

伪类选择器还支持链式规则:

“选择器:状态1:状态2:状态3”

状态之间使用逻辑与,同时满足条件样式才生效

btn->setStyleSheet("QPushButton:hover:pressed { color: yellow; }");

在这里插入图片描述

(9)Subcontrol选择器

"类名::部件名"作为选择器,类由多个部件组成,通过它可以设置部件的外观。

QCheckBox* check = new QCheckBox("test", ui->centralWidget);
check->setStyleSheet("QCheckBox::indicator:checked { image: url(:/res/check.png); }""QCheckBox::indicator:unchecked { image: url(:/res/uncheck.png); }");

在这里插入图片描述

3、属性

QSS基本属性参考链接:《使用Qss设置QT程序界面的样式和皮肤》

4、加载qss的方式

一般一个窗口对应定义一个qss文件,将该窗口中的所有控件qss放在其中,并将qss文件添加到资源文件中。

test.qss:

QMainWindow { border-image: url(:/res/car.jpg); 
}

加载qss文件

void MainWindow::loadQssFile()
{QFile file(":/res/test.qss");if(file.open(QIODevice::ReadOnly | QIODevice::Text)){qApp->setStyleSheet(file.readAll());file.close();}
}

在这里插入图片描述
Qt更多控件QSS使用例子,参考Qt帮助文档中:Qt Style Sheets Examples



若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!

同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。

本文涉及工程代码,公众号回复:36QSS,即可下载。

在这里插入图片描述


http://chatgpt.dhexx.cn/article/Lrwj6c8r.shtml

相关文章

QTreeWidget样式qss

文章目录 QTreeWidget/QTreeView样式QHeaderView背景属性alternate-background-color:交替背景色background:背景属性background-color:控件的背景色background-image:用于控件的背景图像。如果图像有透明部分则显示透明部分。bac…

qss文件使用

每个控件提供的样式太少?只能简单的设置颜色、字体颜色、字体大小?每次设置都要输入好长一串好麻烦? 现在你只要写一段qss就能满足你的一切需求,实现效果如下 本文将从下面三个方向慢慢阐述qss的使用 1、如何使用qss 2、如何修…

QSS 基础

如果你会 CSS,那么 QSS 对你来说将会非常简单,QSS 的语法和 CSS 的愈发非常相似,但也有些不同,有些 CSS 的东西在 QSS 里被去掉了,QSS 也加了些自己特有的东西,不过大多数还是差不多的,下面以修…

Qt QSS使用

一、选择器类型 Qt QSS选择器和CSS2、CSS3的选择器类似,建议先学习或者复习一下CSS选择器的语法。QSS虽然和CSS类型,但有也稍许不同,而且支持的语法也没那么多,具体讲解如下。 1.1 类选择器 /* 匹配QPushButton的实例及其子类 …

QSS 介绍

目录 一、自定义 widget 的两种方式二、一个简单示例三、QSS 比 QPalette 强大四、使用 Qt Designer 方便查看 qss 效果 一、自定义 widget 的两种方式 自定义 widget 外观的方式有两种: 子类化 QStyle;使用 Qt Style Sheets 机制; Qt Sty…

学习QSS样式表

文章目录 一、 什么是QSS二、辅助工具三、Qt样式表设置函数:setStyleSheet四、Qss选择器1、通用选择器2、类型选择器3、类选择器4、ID选择器5、后代选择器6、子元素选择器7、属性选择器8、并集选择器9、子控件选择器10、伪类选择器11、选择器的匹配规则 五、QSS常用…

QSS自定义属性

1.基本使用 &#xff08;参见 Qt 文档页章节 Setting QObject Properties&#xff1a;https://doc.qt.io/qt-5/stylesheet-syntax.html&#xff09; 从 Qt 4.3 及更高版本开始&#xff0c;可以使用 qproperty- <属性名称> 语法设置任何 designable 的 Q_PROPERTY &…

QSS

摘自&#xff1a;https://qtdebug.com/qtbook-qss/ Qt 提供的 widget 的默认外观很多时候都不符合项目的界面需求&#xff0c;必须要改&#xff0c;修改一个 widget 的外观&#xff08;Look and Feel&#xff09;有以下的方法&#xff1a; 继承 Widget&#xff0c;然后在 pai…

QSS 语法

目录 1. 基本语法1.1 样式规则1.2 选择器、声明1.3 大小写1.4 多个选择器 2. 选择器2.1 通用选择器&#xff1a;*2.2 类型选择器&#xff1a;QPushButton2.3 属性选择器&#xff1a;QPushButton[flat"false"]2.4 类选择器&#xff1a;.QPushButton2.5 ID 选择器&…

QSS(Qt样式表)概念

Qt样式表是一个可以自定义部件外观的十分强大的机制&#xff0c;除了QStyle更改的样式&#xff0c;其他的都可以由QSS修改。由于受到Html的CSS启发&#xff0c;所以叫QSS。 代码添加样式表ui界面上添加样式表 代码添加样式表&#xff1a; setStyleSheet&#xff08;&#xff0…

【QT】QSS使用总结

文章目录 主要流程&#xff1a;导入QSS文件&#xff1a;1. 添加Qt Resource File文件&#xff0c;输入名称2. 在工程文件目录下先建一个".txt"文件&#xff0c;重新命名后缀为".qss"3. 右键添加现有文件qss.qss4. 完成添加5. 将 qss样式应用到整个工程 QSS…

01_1_Qt工程实践_Qt样式表Qss(什么是QSS;基本语法;setStyleSheet函数;样式表的属性值;利用QtCreate实现样式切换;样式表实现皮肤改变实例)

本篇介绍什么是样式表&#xff0c;讨论如何使用Qt样式表Qss修改应用程序外观&#xff0c;并通过实例进行讲解。 了解HTML的同学都知道&#xff0c;一般在HTML中我们把样式表叫做CSS&#xff0c;在Qt中我们称之为QSS。QSS和CSS并不完全等同&#xff0c;语法完全类似&#xff0c…

【QT】QSS美化——基础知识

目录 一、辅助工具 二、QSS加载方式 三、QSS选择器类型 3.1 通配选择器 3.2 类型选择器 3.3 属性选择器 3.4 类选择器 3.5 ID选择器 3.6 后代选择器 3.7 子选择器 3.8 伪类选择器 四、QSS常用属性 4.1 字体 4.2 颜色 4.3 内边距 4.4 外边距 4.5 背景 4.6 边框…

在没有QQ、微信时局域网共享文件方法

1、首先开启共享 2、将要共享文件的电脑做同样操作 查看局域网下电脑 点击要访问的电脑输入该电脑的账号密码进行登录。 3、选择要共享的文件和访问权限 在要共享文件的电脑选择要共享的文件右键-授予访问权限-家庭组 然后选特定用户-everyone即可。 之后就是在这个文件里面…

分享:我的局域网QQ Bing(必应)1.0 正式发布,包括:聊天、视频、语音、电话、截屏、文件传输 等

分享&#xff1a;我的局域网QQ Bing&#xff08;必应&#xff09;1.0 正式发布,包括&#xff1a;聊天、视频、语音、电话、截屏、文件传输 等 百万商业圈 局域网QQ Bing&#xff08;必应&#xff09;1.0 正式发布 Bing&#xff08;必应&#xff09;是一款优秀的企业局域网即时…

交换机组建局域网

说来惭愧&#xff0c;今天才搞明白用交换机组建局域网的原理&#xff0c;这里介绍方法&#xff1a; 平时使用的路由器有交换机的功能&#xff0c;单纯使用交换机还是第一次&#xff1a; 1、将所有电bai脑连到同一台交换机上&#xff0c;du即将各台电zhi脑的网线插入同一dao台交…

基于JAVA的局域网聊天软件的设计与实现(仿制QQ)

一、系统分析 1.1 问题描述 客户端 实现简易版的局域网聊天器实现富文本内容聊天智能聊天机器人群发消息传送文件等功能 服务器端 实现群发通知管理聊天线程 1.2 系统功能分析 客户端功能 登陆注册发送表情消息发送文本消息截取图片图片处理震动效果发送文件群发消息设置聊天…

通过交换机组建局域网

实现目标&#xff1a;利用交换机搭建一个局域网&#xff0c;使得该局域网下同一网段的所有机器相互通信 所需设备&#xff1a;电脑一台&#xff0c;树莓派两个&#xff0c;工控机两台&#xff0c;TP-Link交换机一台。 该教程就以一台电脑和一台树莓派搭建局域网为一个demo&am…

PHPstudy配置局域网

PHPstudy配置局域网 1.打开小皮网站&#xff08;https://www.xp.cn/download.html&#xff09;&#xff0c;下载64位PHPstudy到电脑桌面 2.解压zip文件 3.打开解压后的文件夹&#xff0c;找到.exe文件&#xff0c;直接安装 4.安装好之后&#xff0c;开启Apache、FTP和MySQL 5…

局域网传输/共享大文件

局域网传输/共享大文件 前段时间和同学传一个4g的数据。想到如下几个点子 通过qq进行传输&#xff0c;但是要上传&#xff0c;还要下载&#xff0c;还要网速给力才行&#xff0c;而且花费的可是双倍的时间&#xff0c;一个上传一个下载&#xff0c;等的黄花菜都凉了。通过u盘…