今天在做qt的多皮肤开发时,webcompiler编译less成qss后,再用rcc工具编译成rcc文件时,部分样式未加载出来,效果如下:
如上图所示,红色方框的部分其实是个关闭按钮,但是未能展示出来,正常情况是下面这个样子,
经过长时间的排查,在notepad++打开对应的qss,在格式菜单中,可以看出,显示的是UTF-8编码格式,如下图所示
将格式改成以UTF-8无BOM格式编码,然后用rcc重新编译就ok了。
下面说下UTF无BOM和有BOM的区别,下面是以有BOM的格式打开的(即UTF-8格式编码)
下面是以无BOM的格式打开的(即UTF-8无BOM格式编码)
对比两张图,可以看出,第一张图多了3个字符,EF BB BF。
这导致qt解析qss出问题。
上面是用webcompiler编译less成qss文件后,修改qss文件的格式为UTF-8无BOM,这个操作不智能,
可以在代码中给予解决。
less文件编译成qss后,无需修改qss的文件格式,在qt代码中修改qss也可以。代码如下
QFile file(strDir + fileName);
if (file.open(QIODevice::ReadOnly))
{
QByteArray contentTrans = file.readAll();
QTextCodec* codec = QTextCodec::codecForName("UTF8");
if (codec)
{
// 转换内容为UTF8编码,如果成功转换说明需要用UTF8编码的内容进行赋值
QTextCodec::ConverterState state;
QString transString = codec->toUnicode(contentTrans, contentTrans.size(), &state);
if (0 == state.invalidChars)
{
// 成功转换
contentTrans = transString.toUtf8();
}
}
content += contentTrans;
file.close();
}