Qt 样式表与控件分离的方法

简介

本文介绍一种将样式表与Qt控件分离,并批量加载资源文件中qss文件的方法。

通过此种方法,可以将各种控件的样式表通过不同的样式文件分离开,更改时查找起来更方便。同时使程序结构更加清爽。
程序文件结构如下图:
这里写图片描述
qss文件内容如图:
这里写图片描述


使用方法

1、方法定义:

定义一个类,提供静态方法加载样式表,类的定义如下:

#include <QFile>
#include <QApplication>
#include <QDirIterator>

/*!
 \brief
 该类提供两个静态函数,用来设置系统的样式表。
 \class CustomHelper CustomHelper.h "CustomHelper.h"
*/
class CustomHelper
{
public:
    /*!
     \brief
     设置指定样式文件中自定义的样式。
     \fn setCustomStyle
     \param qssFile
     样式表文件的路径,可以为资源文件路径和实际路径
    */
    static void setCustomStyle(const QString &qssFile) {
        QFile qss(qssFile);
        qss.open(QFile::ReadOnly | QIODevice::Text);
        QString styleSheet = qss.readAll();
        qApp->setStyleSheet(styleSheet);
        qss.close();
    }

    /*!
     \brief
    设置自定义的样式。该函数会遍历资源文件中所有以.qss结尾的文件,拼装在一起,然后调用setStyleSheet来设置样式
     \fn setCustomStyle
    */
    static void setCustomStyle() {
        QDirIterator it(":",QDirIterator::Subdirectories);

        QString str_qssFile;
        QString str_styleSheet;
        QFile file;

        while (it.hasNext()) {
            str_qssFile = it.next();
            if (str_qssFile.right(4) == ".qss"){
                file.setFileName(str_qssFile);
                file.open(QIODevice::ReadOnly | QIODevice::Text);

                str_styleSheet.append(file.readAll());

                file.close();
            }
        }

        if (!str_styleSheet.isEmpty())
            qApp->setStyleSheet(str_styleSheet);
    }
};

2、使用方法

#include "MainWindow.h"
#include <QApplication>
#include <CustomHelper.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

//    CustomHelper::setCustomStyle(":/QSS/QPushButton.qss");
    CustomHelper::setCustomStyle();

    MainWindow w;
    w.show();

    return a.exec();
}

3、注意事项

3.1 样式表注释

样式表文件中不能使用//进行注释,否则会造成样式表解析失败。

3.2 样式表高亮开启

这里写图片描述
在模式中增加 *.qss , 与前方用; 隔开


如有疑问与好想法,欢迎与我交流
Email:[email protected]

猜你喜欢

转载自blog.csdn.net/baidu_33850454/article/details/81570450