文章标题

来源:互联网 发布:微信公众号助手 源码 编辑:程序博客网 时间:2024/06/06 03:09

Qt Creator中使用qss对界面美化没有作用(效果)的问题

  最近在研究qt界面开发,发现使用qss对界面进行美化后效果不错,要比mfc效率高很多,美化效果也很出色。但是在使用qss文件对界面控件进行美化的过程中遇到了个很奇葩的问题,困惑了我好久,今晚又遇到了,感觉整个人都不好了,问题症状如下:

  (1)我在Qt Creator中新建了一个工程,添加qss文件及内容后运行,加载qss文件并运行程序,qss美化效果死活出不来(经检查,qss内容及加载过程都正确);

  (2)在Qt Creator中打开一个现有项目,该项目中含有qss文件,能正确加载,在别的电脑上也验证过美化效果能出来,在我电脑上直接运行也有效果,但是我更改了qss文件的内容后,再运行,所有qss美化效果都没了。

  通过从网上查询,最终参考别人的意见并自己测试,最终解决,基本确定是qss编码问题造成的,解决方案如下:

  (1)在项目中选中qss文件,右击/用…打开/System Editor。如下图:

    

  (2)文件/另存为/编码方式选择ANSI/保存

    

  (3)提示框问是否替换?/是

  

  (4)Qt Creator/工具/选项/文本编辑器/行为/UTF-8 BOM选择“总是删除”。

     

  (5)重新qmake/构建/运行程序,解决了,qss美化效果出来了。

原因分析:

  感觉是由于qss编码问题造成的,我的qss文件是通过在工程目录下建一个txt文件,然后改为qss文件,再加到工程里来的,怀疑这个过程中有编码不统一问题。在网上搜索了半天只搜到一篇于此相关的文章,感觉对我帮助很大,在此表示感谢!网址为:http://www.vbgudu.com/html/20160628/53209.html。怕以后找不到,特将内容直接贴在下面:

【qss功能需要正确设置编码才能起作用】

   QT这个库,无非使用OO对跨平台做了绝佳的封装,这其中的主要工作也就是比较繁琐而已,但并不多么了不起。唯独其中提供的QSS功能,让我感到十分神奇,做出来的效果实在很惊艳,而使用代码却又是如此简单,而且是在长期以来中规中冷冰冰的C++编译器上提供这些功能,实在是刮过业界一个新风。也让我认识到,不是什么功能都是编译器提供的,编写库的人,在普通的编译器规则上,照样可以做出各种惊艳的效果来。

  但是最近碰到一个问题,就是我的QSS设置效果在开发机上好好的,并且自己开的虚拟机上也是好好的,但是公司同事机上死活没有效果。这个问题疑惑了很久了,今天终于灵光一闪,解决了这个问题。原因还是出在QSS文件编码格式上。出于跨平台和多语言考虑,我把项目所有源文件都改成了UTF8+BOM格式,这个QSS文件也不例外(我的QSS文件里不含有中文字符)。读取QSS的代码在main函数里这样写:

        

QFile qss(":/qss/myfile");qss.open(QFile::ReadOnly); // qss 也要讲究是什么格式的文件读取qApp->setStyleSheet(qss.readAll()); qss.close();

  我是在中文环境下开发的,于是它按照ANSI格式去读取QSS文件了,也不知道为什么就没问题。估计是文件头上的三个字节EF BB BF都被当作中文读出来了,然后试图去匹配QSS自带关键字,都对不上,然后就被忽略了,后面继续读取的话,那都是正确的。但是同一个文件同样的代码,到西文环境下,可能成功匹配几个字母,后面的却再也对不上号,于是就全部忽略了。这就是为什么我的程序QSS效果在同事机子上始终没有效果的原因。解决方案是把QSS文件转成为ANSI,或者不带BOM的UTF8格式,重新编译,然后效果就又重新出现啦。哦,原来这样啊,QSS文件就不能和ts语言文件一样做的更内置一点呢?

  另外就是QT对它自己的错误控制的很好,不轻易报错,这里QSS读不出来、对不上号不报错,SIGNAL对SLOT对不上号也不报错,这到底是优点还是缺点呢?我感觉是方便了初级开发者,复杂了对运行时的深度控制判断。

 

标签: qss, qt, qss作用, qss效果, qss编码格式, UTF-8, 作用, 效果
好文要顶 关注我 收藏该文
一步一个小脚印
关注 - 0
粉丝 - 0
+加关注
1
0
« 上一篇:final关键字
» 下一篇:getActionBar()为null的解决方法总结(引用他人)

posted on 2016-12-19 23:40 一步一个小脚印 阅读(287) 评论(0) 编辑 收藏

</div><script type="text/javascript" data-garbage="true">var allowComments=true,cb_blogId=206530,cb_entryId=6193111,cb_blogApp=currentBlogApp,cb_blogUserGuid='01a00383-2376-e411-b908-9dcfd8948a71',cb_entryCreatedDate='2016/12/19 23:40:00';loadViewCount(cb_entryId);</script></div><a name="!comments"></a><div id="blog-comments-placeholder" data-garbage="true"></div><script type="text/javascript" data-garbage="true">var commentManager = new blogCommentManager();commentManager.renderComments(0);</script>
刷新评论刷新页面返回顶部
【推荐】50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
【活动】一元专享1500元微软智能云Azure
【推荐】融云发布 App 社交化白皮书 IM 提升活跃超 8 倍
【推荐】自开发 零实施的BPM
最新IT新闻:
· 老任的Switch发布啦!这些惊喜你不该错过
· 苹果允许开发最大4GB的电视APP 奢华的大屏游戏要来了
· 夏普富士康拟在美国建设液晶面板厂 或投资90亿美元
· 英特尔部分Skylake处理器存在Bug 可通过USB接管计算机
· 乐视发公告:168亿融资落地 融创中国投资约150亿
» 更多新闻…
最新知识库文章:
· 「代码家」的学习过程和学习经验分享
· 写给未来的程序媛
· 高质量的工程代码为什么难写
· 循序渐进地代码重构
· 技术的正宗与野路子
» 更多知识库文章…
fixPostBody(); setTimeout(function () { incrementViewCount(cb_entryId); }, 50); deliverAdT2(); deliverAdC1(); deliverAdC2(); loadNewsAndKb(); loadBlogSignature(); LoadPostInfoBlock(cb_blogId, cb_entryId, cb_blogApp, cb_blogUserGuid); GetPrevNextPost(cb_entryId, cb_blogId, cb_entryCreatedDate); loadOptUnderPost(); GetHistoryToday(cb_blogId, cb_blogApp, cb_entryCreatedDate);


0 0
原创粉丝点击