1、编写QRC资源文件[window和linux通用]
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中的布局和运行后的布局显示有差异