当前位置: 首页 > article >正文

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

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_OBJECT

public:
    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);          // 设置全局的QLabel
    ui->label1->setStyleSheet(Download_lqss_label1);    // 仅设置label1
}

Download::~Download()
{
    delete ui;
}

运行效果如下:

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


http://www.kler.cn/a/879.html

相关文章:

  • 算法随笔_19: 数组中的最长山脉
  • 【2024年华为OD机试】(A卷,200分)- 优雅子数组 (JavaScriptJava PythonC/C++)
  • 使用 `scanpy` 观察 `AnnData` 对象内部数据结构
  • 基于JAVA的微信点餐小程序设计与实现(LW+源码+讲解)
  • 大数据与AI驱动的商业查询平台:企业市场拓展的变革引擎​
  • 在Ubuntu上安装RabbitMQ教程
  • Web漏洞-命令执行和代码执行漏洞
  • 百度终于要出手了?文心一言
  • 文心一言发布的个人看法
  • react的基础使用
  • 【每日一题】——网购
  • 双指针 -876. 链表的中间结点-leetcode
  • 【面试题系列】K8S常见面试题
  • 【vue.js】在网页中实现一个金属抛光质感的按钮
  • 有关pytorch的一些总结
  • 今年还能学java么?
  • 面试阿里测开岗失败后,被面试官在朋友圈吐槽了......
  • 多线程案例——阻塞队列
  • HTTP详解
  • 15000 字的 SQL 语句大全 第一部分
  • C语言格式和注意点
  • Redis知识点汇总
  • <Linux>计算机体系结构和操作系统
  • 我一个女孩子居然做了十年硬件……
  • Qss样式表语法
  • JavaScript 库