qt动态加载qss 更好的推荐方式

1、编写QRC资源文件[window和linux通用]

        qt动态加载qss 更好的推荐方式_第1张图片

2、过rcc程序生成rcc资源文件

        生成2进制数据:

        通过控制台窗口执行以下命令,会把qrc中的资源文件写成二进制数据保存

 rcc.exe -binary .\resuorce.qrc -o .\resuorce.rcc 

        生成16进制数据:

        通过控制台窗口执行以下命令,会把qrc中的资源文件写成16进制数据保存

​​​​​​​rcc.exe .\resuorce.qrc -o .\resuorce.rcc

以上方式选其一种方式生成rcc文件

3、编写qss文件

4、代码中加载rcc和qss文件设置效果

void loadSkin(const QString &path)
{
    QString resPath = path+"/resuorce.rcc";
    QString qssPath = path+"/style.qss";
    QResource::registerResource(resPath);
    QFile qss(qssPath);
    qss.open(QFile::ReadOnly);
    QByteArray qssBuf = qss.readAll();
    setStyleSheet(qssBuf);
    qss.close();
    QResource::unregisterResource(m_skinRecPath);
    m_skinRecPath = resPath;
}

可能存在的问题:在qss中使用相对路径时,没有生效。

原因:相对哪个文件没有搞清楚,因为在开发过程中,并不是相对于qss文件本身。

解决:
  当我们在开发过程中,需要将qss文件加载到main文件里,那么,此时相对的是main文件而不是qss文件本身。
  当我们使用编译好的exe文件打开软件,那么此时相对的是exe文件,也不是qss文件本身。
 

此方法的优点:

放在文件容易被篡改,集成到可执行文件不够灵活,一旦样式表更新需要重新编译文件,如何做到既能只更新样式表文件,又不需要重新编译可执行文件,又能防止被篡改:采用rcc命令将资源文件编译生成二进制,只需要替换该二进制文件即可;

注意:

在designer的属性列表 设置了尺寸,在读取的qss文件设置属性时会冲突,直接表现结果是:designer中的布局和运行后的布局显示有差异

你可能感兴趣的:(QSS详解,qt,开发语言)