QT一些容易犯错的点

概述

这些点都是建立在qt5.0之后的,而且以默认中文操作系统为准

关于文字编码

这里说的文字编码主要指的,当你要显示一段文字时,否则没必要管编码。
比如在qt里书写如下代码:
const char *cp = "中国";
那么这个cp里面是什么内容呢,如果调用ui->label->setText(cp),又是否能正确显示呢?
我们只说结论,细节参考 其它文章,网上不少

  1. cp里面是什么内容呢?
    首先cp是一段buffer,运行时里面是什么内容要根据运行时的编码来决定,关于各种编码定义是个新课题,不适合笔记。
    当运行时编码是utf-8时,cp是6个字节的buffer(不含\0)
    当运行时编码是GBK时,cp是4个字节的buffer(不含\0)

  2. cp又是否能正确显示呢?
    在Qt中,唯一能让人迷惑的就是类似这样的代码乱码 (windows下 使用msvc kit)
    setText(tr(“中国”))
    此处出乱码是有个隐形的东西,msvc kit在中文系统会默认指定前文提到的运行时编码为GBK, 这就导致cp也就是tr括弧内的"中国“为 4字节的gbk编码,而不是tr预期的6字节utf-8编码,然后tr按照utf8去解释这个gbk的buffer,那自然是乱码。
    如何克服呢, 在.pro加个编译选项即可
    QMAKE_CXXFLAGS += -execution-charset:utf-8
    rebuild 后发现乱码解决了
    这里要提一个点 qt5.0后 tr宏不在可以指定codec了,也就是说它会固定认为 tr扩起来的buffer是utf8编码,如果不是,又没翻译文件的话,会出乱码,上文中国出乱码就是因为没改之前tr里面不是utf8的编码
    你查看tr源码就会发现,它先去翻译文件找这个字符串,如果找不到,直接调用QSring::fromUtf8(cp), 那说道这,其实都真像(●—●)了。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、文件/文件夹管理 ls 列出当前目录文件(不包括隐含文件) ls -a 列出当前目录文件(包括隐含文件) ls...
    小杰的简书阅读 2,540评论 0 45
  • 进入带空格的文件或者文件夹 Linux文件权限详解 文件和目录权限概述 在linux中的每一个文件或目录都包含有访...
    annkee阅读 2,706评论 0 4
  • 一、文件/文件夹管理 ls 列出当前目录文件(不包括隐含文件) ls -a 列出当前目录文件(包括隐含文件) ls...
    会飞的鱼Coo阅读 4,571评论 1 23
  • Ubuntu 常用命令大全 查看软件 xxx 安装内容 #dpkg -L xxx 查找软件 #apt-cache ...
    guiwuzhe阅读 2,603评论 0 14
  • 一、文件/文件夹管理 ls 列出当前目录文件(不包括隐含文件)ls -a 列出当前目录文件(包括隐含文件)l...
    路痴千行阅读 2,433评论 0 5