美文网首页
QT一些容易犯错的点

QT一些容易犯错的点

作者: 九风特 | 来源:发表于2023-01-15 15:49 被阅读0次

概述

这些点都是建立在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), 那说道这,其实都真像(●—●)了。

相关文章

  • QT一些容易犯错的点

    概述 这些点都是建立在qt5.0之后的,而且以默认中文操作系统为准 关于文字编码 这里说的文字编码主要指的,当你要...

  • go优化——容易犯错点记载

    内容 1 切片与数组2 defer3 make与new4 方法与函数5 闭包6 循环 1 切片和数组 数组和结构体...

  • CMake教程——QT项目使用CMake

    QT项目使用CMake编译QT IDE会增加一些额外的配置,我便记录下: 备注1: QT中moc的作用: Qt 将...

  • Qt开发系列3——Qt中的核心技术1

    简介 这里简单介绍Qt的一些核心机制,具体参见Qt文档。 主要包含内容: Qt的信号和槽,以及事件机制 Qt Ob...

  • UILabel And UIButton

    UILabel UIButton 这儿容易犯错的是button能用点语法点出button.titleLabel.t...

  • week15 Kmeans和MFC GDI入门

    Qt和Qt Creator的区别Qt是C++的一个库,或者说是开发框架,里面集成了一些库函数,提高开发效率。Qt ...

  • Using Your Inventory 2

    2.仔细思考你的回答,尤其注意那些你特别容易犯错的方面。不要想当然地认为在所有情况下都同样容易犯错;一些方面可能比...

  • Qt一些示例程序

    Qt一些示例程序How to Add & Remove Qt Widgets Dynamically at Run...

  • 【车牌识别】part1先设计个“好看”的界面

    用c++写界面,用MFC库和Qt库的比较多。Qt相比MFC而言,更加的简易,更加容易上手,所以博主选择了用Qt写界...

  • 犯错很容易,犯错之后呢?

    前天看了一本书叫正面管教,里面讲到了一个概念是:犯错是学习的大好时机,深有感触,不仅对于孩子来说犯错是学习的大好时...

网友评论

      本文标题:QT一些容易犯错的点

      本文链接:https://www.haomeiwen.com/subject/uzdacdtx.html