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的作用需要正确设置文件编码才能起作用的更多相关文章

  1. jsp_设置文件编码

    jsp有两种方法可以设置文件编码: (1)<%@page language="java" contentType="text/html;charset=utf-8& ...

  2. Eclipse中设置文件编码

    如果你在使用某个editor进行开发的话,文件编码就由改editor解决即可 Eclipse中也有这个功能,帮你设置文件的编码,选择Edit->Set Encoding即可 注意,这个选项针对不 ...

  3. JSP设置文件编码

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  4. Myeclipse设置文件编码

    设置选项分析: 1.window-->preferences-->General-->workspace-->Text file encoding 这里设置全局默认的文件编码格 ...

  5. tomcat设置文件编码

    tomcat修改bin文件夹下面的catalina.bat文件可以解决乱码在文件中加上JAVA_OPTS="-server -Xms128M -Xmx4096M -XX:PermSize=5 ...

  6. pycharm 设置文件编码的位置:Editor-->File Encodings

    打开设置-->Editor-->File Encodings 

  7. css设置文件编码

    在外部css文件的顶部,写入下面代码: @charset "UTF-8";

  8. pycharm设置文件编码

    原文链接

  9. php设置文件编码

    <?php @header('Content-type: text/html;charset=UTF-8'); ?>

随机推荐

  1. Apache,添加虚拟目录

    这几天在自己的虚拟机里面安装了2003,有人说window陪iis较好,但是对iis无兴趣,就自己装了apache,下面介绍如何配置自己的虚拟目录. 想配置自己的虚拟目录,那必须要知道点apache的 ...

  2. PHP获取当前日期或指定日期的所在月的第一天和最后一天

    <?php function getthemonth($date) { $firstday = date('Y-m-01', strtotime($date)); $lastday = date ...

  3. Microsoft Visual Studio Ultimate 2015 Preview使用笔记

    1.内存好象存在泄露问题

  4. CentOS安装thrift

    下载thrift依赖的东西  yum -y install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-dev ...

  5. Java eclipse export jar包 包括第三方引入的jar

    1.安装fatjar插件 2.export jar 说明:安装后,操作说明以官网为准,不同的版本会有不同的右键菜单,我的版本(Eclipse Java EE IDE for Web Developer ...

  6. 一致性hash应用到redis

    理解分布式存储的本质 有一个经典的实践经验: 数(值)据大了, 什么都是问题! 如果要求128B或更大数值计算, 哪么四则运算会是个大问题! 如果要求128T或更大日志存储, 哪么文件存储会是个大问题 ...

  7. 将eclipse的应用程序打包成.exe

    转自:http://blog.163.com/loveshijie_1991/blog/static/1760553112012102573437156/ 参考:http://blog.csdn.ne ...

  8. Codeforces Round #331 (Div. 2) C. Wilbur and Points

    C. Wilbur and Points time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  9. Leetcode-Read N Characters Given Read4 II

    The API: int read4(char *buf) reads 4 characters at a time from a file. The return value is the actu ...

  10. C# type - IsPrimitive

    Type t = typeof(string); if (t.IsPrimitive)//not { Console.WriteLine("string is a Primitive&quo ...