最近在研究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对不上号也不报错,这到底是优点还是缺点呢?我感觉是方便了初级开发者,复杂了对运行时的深度控制判断。

Qt Creator中使用qss对界面美化没有作用(效果)的问题的更多相关文章

  1. QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL

    QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL 课程1   C语言程序设计高级实用速成课程 基础+进阶+自学 课程2   C语言程序设计Windows GDI图形绘 ...

  2. Qt Creator 中的插件Plugin, 区分说明。。。

    Qt Creator 中可以创建 三中类型的插件Plugin: 1.用的最多的,派生自QGenericPlugin类: 在新建Library,   Plugin类型工程中,新建. 调用使用QPlugi ...

  3. 如何在 Qt Creator 中应用 one dark pro 主题

    前言 Qt Creator 自带了几款主题,但是并不好看.在博客 <Qt Creator打造VScode one dark pro主题配色> 中给出了 one dark pro 主题的配置 ...

  4. qt creator中使用qwt插件

    前提:我用mingw编译的qwt. 将qwt插件集成到qt designer非常easy.仅仅要把qwt编译的qwt_designer_plugin.dll复制到C:\Qt\Qt5.3.1\5.3\m ...

  5. Qt在VS2013或Qt Creator 中的控制台输出方式设置

    首先值得注意的是:在写程序的时候,项目保存路径不要涉及到中文,否则容易出错! 一.Qt在VS2013中的控制台输出方式: 注意:这里是而不是Qt Application. 然后直接点击finish即可 ...

  6. Qt Creator中,include路径包含过程(或如何找到对应的头文件)

    Qt Creator中,include路径包含过程(或如何找到对应的头文件) 利用Qt Creator开发程序时,需要包含利用#include来添加头文件. 大家都知道,#include <&g ...

  7. qt creator中编辑Makefile的设置

    在qt creator中编辑Makefile时的Tab键总是不能识别,需要这样设置

  8. 如何在Qt Creator中导入图标资源

    本文主要描述如何在Qt Creator中创建资源文件,并的打入导入图标文件. 查看图标资源文件时,可以在项目的工程文件上鼠标单击右键-Open With-资源编辑器,效果如下图所示: 在项目的工程文件 ...

  9. Qt Creator中如何选择某个子项目为启动项目

    Qt Creator中的子目录项目类似于Visual Studio中的Solution(解决方案),可以用来管理多个子项目.但是在Qt Creator IDE中由不能像Visual Studio中那样 ...

随机推荐

  1. UVa 1615 Highway (贪心,区间选点问题)

    题意:给定一个数 n 个点,和一个d,要求在x轴上选出尽量少的点,使得对于给定的每个点,都有一个选出的点离它的欧几里德距离不超过d. 析:首先这是一个贪心的题目,并且是区间选点问题,什么是区间选点呢, ...

  2. Web图片编辑控件开发文档-Xproer.ImageEditor

    版权所有 2009-2014 荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com 产品首页:http://www.ncmem.com/webplug/image-e ...

  3. linux每天一小步---alias命令详解

    1 命令功能     alias命令用来设置指令的别名,alias命令设置的别名只限于该次登陆操作,若要每次登入即自动设好别名,可在/etc/profile或自己的~/.bashrc中设定指令的别名. ...

  4. linux每天一小步---cd命令详解

    1 命令功能: 该命令用于目录间的相互切换,cd是change directory的 缩写 2 命令语法:     cd  [目录名] 3 使用范例: 使用cd命令从当前用户的家目录切换到系统的根目录 ...

  5. java文件的读写程序代码

    package textopen; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutp ...

  6. Python入门基础学习 三

    Python入门基础学习 三 数据类型 Python区分整型和浮点型依靠的是小数点,有小数点就是浮点型. e记法:e就是10的意思,是一种科学的计数法,15000=1.5e4 布尔类型是一种特殊的整形 ...

  7. Objective-C 学习笔记(五) 快速枚举

    Objective-C 快速枚举 快速枚举是一个Objective-C的功能,有助于列举一个集合. 快速枚举语法 for (classType variable in collectionObject ...

  8. 神器与经典--DMVsinSQLServer

    前言: 在不经意间发现这个SQL,正能量瞬间饱满,赶紧向周边的人分享,私藏是罪过啊! 请复制粘贴然后F5,经典无须多说! /************************************** ...

  9. win10 数字许可证激活被 KMS激活覆盖

    打开cmd(管理员身份),依次执行以下命令: slmgr/upk slmgr/ckms slmgr/rearm 重启设备后联网登录Microsoft账号,转设置-激活-疑难解答,windows会找到与 ...

  10. html开发基础

    1 Doctype Doctype告诉浏览器使用什么样的html或xhtml规范来解析html文档 有和无的区别 BackCompat:标准兼容模式未开启(或叫怪异模式[Quirks mode].混杂 ...