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. 判断php数组维度的小例子

    分享一例判断php数组维度的代码,供大家参考. 如下所示: <?php /** * 返回数组的维度 * @param [type] $arr [description] * @return [t ...

  2. thinkpad t440p 解决无线网卡驱动

    $ wget https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1239578/+attachment/4057550/+files/rtl_9 ...

  3. Codeforces Round #359 (Div. 2) D. Kay and Snowflake 树的重心

    题目链接: 题目 D. Kay and Snowflake time limit per test 3 seconds memory limit per test 256 megabytes inpu ...

  4. SQLServer调试

    1.普通调试 直接点击SSMS客户端上的调试按钮即可 2.存储过程调试 2.1 定义存储过程(以Northwind数据库为例) USE [Northwind] GO /****** Object: S ...

  5. ContextLoaderListener作用详解(转)

    ContextLoaderListener监听器的作用就是启动Web容器时,自动装配ApplicationContext的配置信息.因为它实现了ServletContextListener这个接口,在 ...

  6. [转载]C#如何在webBrowser1控件通过TagName,Name查找元素(没有ID时)遍历窗体元素

    //防止页面多次刷新页面执行 ) { string GetUserName = System.Configuration.ConfigurationSettings.AppSettings[" ...

  7. PHP中如何给日期加上一个月 加一周 加一天

    echo   date("Y-m-d",strtotime("+1 month",strtotime("2012-02-04"))); 结果 ...

  8. java socket编程基础(转)

    一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...

  9. list 去掉重复的值

    去除List列表中重复值(3种解决方法)public static void main(String[] args) { String[] ar = { "dd", "c ...

  10. Unity3D TestTool Part _1

    一直想看看Unity3d官方推出的UnityTestTools的测试插件,今天有空尝试了一下. 一.Quick Start 1. create a plane position which trans ...