Qt cmake工程加载文件夹中的所有qss样式表

首先添加资源文件source.qrc

Qt cmake工程加载文件夹中的所有qss样式表_第1张图片

在cmake文件中添加如下代码(根据路径不同酌情更改,比如我是将source.qrc文件创建在source文件夹中的):

set(Qrc_Files
    source/source.qrc
    )

新建style.qss样式文件(我的做法是在qss文件夹中新建文本文件,改名叫style.qss),点击添加前缀,一般来说前缀用【/】足够了,如果有多个qrc文件,想要区分的话可以将前缀改成不一样的。点击添加文件将qss文件添加到资源文件中,如图所示就是已经添加成功了,双击这个qss文件,编辑一下,将想要的样式填写进去。

Qt cmake工程加载文件夹中的所有qss样式表_第2张图片

在cmake文件中添加如下代码(add_executable中的PROJECT_SRCS等根据自己的情况添加,别把这些全部抄进自己的代码):

qt5_add_resources(QRC_FILES ${Qrc_Files})

add_executable(${PROJECT_NAME}
    WIN32
    ${PROJECT_SRCS}
    ${PROJECT_UIS}
    ${QRC_FILES}
    )

接下来就是重头戏了,我的做法是通过遍历文件夹中以qss结尾的文件,并将文件全部加载到QString变量中,最后使用这个变量设置app的样式:

void setQssFile()
{
    //qss模板
    QString qss = "";
    //设置qss文件夹路径(相对路径和绝对路径都可)
    QDir dir(":/qss");
    QFileInfoList fileList = dir.entryInfoList();

    qDebug() << QStringLiteral("--------从资源目录读取qss文件begin--------");
    qDebug() << QString("Dir %1 is exists:").arg(dir.absolutePath()) << dir.exists();
    foreach(QFileInfo fileItem, fileList) {
        if (fileItem.isFile() && fileItem.suffix() == QString("qss")) {
            qDebug() << "absoluteFilePath:"<setStyleSheet(qss);
}

将这个函数添加到main.cpp中,并在main函数中直接调用,就可以将qss文件中的所有qss文件加载到应用中啦。

注:我一开始没有添加qt5_add_resources代码,结果发现用这个方法,会提示我这个目录不存在:

用@一去丶二三里在Qt 之加载 QSS 文件中所说的方法去加载单个qss也不行,一直提示我说:

QIODevice::read (QFile, ":\qss\style.qss"): device not open

这个事情折磨了我很长时间,上网搜索发现没人遇到过qss文件加载不出来的问题,觉得非常奇怪——难道大家的都可以,只有我的这个不行吗?于是我创建了一个qmake的工程,在qmake工程中用这个方法去加载,发现qmake的工程就没有这个问题,添加完qrc和qss文件之后,不用在工程文件中添加其他代码就可以加载出制定样式,用cmake的人苦啊,要多学一些cmake语法不说,还那么多的坑,真的是无语......

你可能感兴趣的:(QT,程序设计,C++)