webcompiler编译less成qss后,样式加载不出来的问题

今天在做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();
            } 

猜你喜欢

转载自blog.csdn.net/tusong86/article/details/106504593