Qt学习_08_用独立的文件存放样式表

news/2024/11/15 14:46:31/

0 前言

上一篇笔记对样式表进行了初步学习,QT学习_07_样式表的初步学习_江湖上都叫我秋博的博客-CSDN博客,在文末我们提到了“样式表肯定不能直接这么写在构造函数里面,那么多样式表看着心就堵,所以下一篇文章考虑如何把样式表用单独的文件或多个不同的文件来写。”,时隔4个半月,特来还愿。一个好的Qt项目,样式表与逻辑肯定是分离的。在全网搜索了各种把样式表分离出来的办法, 用qss文件的办法是最常见的。 不过qss对局部生效这一点我还没搞清楚,或许它也没办法搞定局部生效的问题,所以本文讲的另一种办法。可以精准的设置每一个部件的样式。

1 正文

在文章QT学习_07_样式表的初步学习_江湖上都叫我秋博的博客-CSDN博客也提了,在构造函数中可以用以下语法来设置指定部件的样式表(局部生效)。

this->setStyleSheet(“样式表”); // 全局生效
ui->指定部件的objectName->setStyleSheet(“样式表”); // 局部生效

setStyleSheet函数的参数是一个QString字符串。这个QString字符串我可以用静态的全局变量的存储,我可以把这些静态全局变量的定义都放在同一个.h文件中,而不是用.qss文件中。

假设我的Qt项目,同时拥有主窗口和子窗口,而且主窗口和每个子窗口都是带 .cpp .h .ui文件的Qt设计师界面类,比如:Qt学习_11_构建内嵌子界面与独立子界面的框架_江湖上都叫我秋博的博客-CSDN博客这篇文章的例子项目。

那么我们可以给每一个Qt设计师界面类都添加一个样式表.h文件。

 

添加完之后的项目目录如下:

 

以download.h 和 download_qss.h为例, 我们需要在download.h里面包含download_qss.h。

#ifndef DOWNLOAD_H
#define DOWNLOAD_H#include <QWidget>
#include <EmbeddedSubUI/download_qss.h> // 👈只看这里就好namespace Ui {
class Download;
}class Download : public QWidget
{Q_OBJECTpublic:explicit Download(QWidget *parent = nullptr);~Download();private:Ui::Download *ui;
};#endif // DOWNLOAD_H

 download_qss.h里,我们首先需要包含<QString>,然后就可以用静态全局变量来定义样式表了。

#ifndef DOWNLOAD_QSS_H
#define DOWNLOAD_QSS_H
#include <QString>// 全局生效样式表
// 命名规则:
// Download 本Qt设计师界面类的类名
// gqss g是global的缩写,【全局】的意思, qss就是Qt样式表的意思
// QLabel 表示本界面的所有QLabel的样式static QString Download_gqss_QLabel ="QLabel{""color:red;""}";// 局部生效样式表
// 命名规则:
// Download 本Qt设计师界面类的类名
// lqss l是local的缩写,【局部】的意思, qss就是Qt样式表的意思
// label1 只是类Download里面包含的某个QLabel部件类static QString Download_lqss_label1 ="QLabel{""color:green;""border-image:url(:/img/img_download)""}";#endif // DOWNLOAD_QSS_H

 

每一个静态的全局QString变量,它可以代表本主/子窗口类用于全局生效的样式表,也可以代表本窗口仅用于某个指定部件的样式表(一个样式表就可以根据不同伪状态设置不同的样式,因此就不用再细分了),所以在定义样式表的时候,我们用变量的名称(_gqss_全局样式/_lqss_局部样式)加以区分。

测试,先给Download子界面拉4个标签

 在download.cpp里面,分别全局加载和局部加载样式表。

#include "download.h"
#include "ui_download.h"Download::Download(QWidget *parent) :QWidget(parent),ui(new Ui::Download)
{ui->setupUi(this);this->setStyleSheet(Download_gqss_QLabel);          // 设置全局的QLabelui->label1->setStyleSheet(Download_lqss_label1);    // 仅设置label1
}Download::~Download()
{delete ui;
}

运行效果如下:

最后愿我们共同进步! 感谢您的阅读,欢迎留言讨论、收藏、点赞、分享。 


http://www.ppmy.cn/news/32793.html

相关文章

转解疑难杂症,详解vector迭代器失效和深浅拷贝的问题

前文http://t.csdn.cn/kVeVX——vector模拟实现本篇文章主要是针对vector中的两个比较经典的问题同时也是上一篇文章遗留下来的问题进行详细解释&#xff0c;第一个就是迭代器失效的问题&#xff0c;第二个是深浅拷贝的问题。ps&#xff1a;注意本文演示用的代码是上一篇vector…

基于springboot+vue的“智慧食堂”程序【毕业论文,源码】

系统登录界面系统架构开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven浏览器&#xf…

Linux驱动开发

一、驱动分类Linux中包含三大类驱动&#xff1a;字符设备驱动、块设备驱动和网络设备驱动。其中字符设备驱动是最大的一类驱动&#xff0c;因为字符设备最多&#xff0c;从led到I2C、SPI、音频等都属于字符设备驱动。块设备驱动和网络设备驱动都要比字符设备驱动复杂。因为其比…

C实现带头循环双向链表(pushback pushfront popback popfront insert erase find destroy等)

带头循环双向链表是链表中效率最高的&#xff0c;但是由于他里面有两个指针节点&#xff0c;所以也会更浪费空间一些&#xff0c;但是他在任意位置的插入删除的效率很高&#xff0c;所以也就弥补了顺序表的不足。 首先我们来看一下他的逻辑结构是什么样子的 下面我们看一下如何…

【面试题】Python软件工程师能力评估试题(一)

文章目录前言应试者需知&#xff08;一&#xff09;Python 语言基础能力评估1、理解问题并完成代码&#xff1a;2、阅读理解代码&#xff0c;并在空白处补充完整代码&#xff1a;3、编写一个装饰器&#xff1a;exposer4、阅读代码并在空白处补充完整代码&#xff1a;5、自行用P…

5 全面认识java的控制流程

全面认识java控制流程1.块作用域2.条件语句3.迭代语句3.1while语句3.2do-while语句3.3for语句3.4 for-in语法4.中断控制流程的语句4.1 return4.2 break和continue4.2.1 不带标签的break语句4.2.2 带标签的break语句4.2.3 continue语句4.3 goto()5.多重选择:switch语句1.块作用域…

小米10s格机修复 nv报错案例解析 关于基带分区的一些常识

前面分享过几期关于基带 diag端口与qcn相关的几篇帖子。其中一位粉丝朋友联系我。他的机型因为误格机导致手机进不去系统&#xff0c;反复进入官方rec报错nv损坏。进不去系统。 有兴趣的朋友可以参阅我的几个帖子&#xff0c;只是个人的一些片面理解。 基带相关贴; 安卓玩机…

进程跟线程的区别

进程跟线程的区别 文章目录进程跟线程的区别前言一.什么线程二.线程与进程的联系三.线程与进程有什么不同前言 现代所有计算机都能同时做几件事情,当一个用户程序正在运行时,计算机还能同时读取磁盘,并向屏幕打印输出正文.在一个多道操作程序中,cpu由一道程序向另外一道程的切…