Qt练习三-QQ登录界面遇到的中文乱码问题

来源:互联网 发布:算法小时代 电子书 编辑:程序博客网 时间:2024/06/18 09:56

事情不断搁置,导致Qt的练习好几天都没有持续,今天算是稍稍弥补一点。不得不说,Qt的话,对于熟悉C++类的思维与操作的人来说,理解起来确实不是什么难事,但是刚入门的时候肯定会遇到各色各样的问题。

给出练习的链接:http://www.qter.org/portal.php?mod=view&aid=29&page=1


我的环境如下: Windows7 + Qt5.51 for Windows MSVC2010



一路按照他的步骤下来没啥问题,就是运行的时候出现这样的界面(中文乱码问题)


百度一搜,看来是大家都会出现的问题,那就不用担心,肯定是由解决办法的

给出一个网址:里面的回答说出了原因点我开始跳转

你的的源码是不带BOM的UTF8格式,但是MSVC不知道你用的UTF8。由于你在简体中文Windows系统下,它就认为你用的是GB18030(也叫GB2312,GBK,CP936)。
当你一个汉字时,占3个字节,用GB18030是无法解析的(1个半汉字)。当你2个汉字时,占6个字节,用GB18030碰巧可以解释成3个汉字。

所以两个汉字没有问题,一个汉字出错,其实都是错的,只不过一个MSVC能一条道走到黑,一个走不下去罢了


后面再看解决办法,有一大堆,什么的乱七八糟,改来改去,觉得麻烦又不好用,最好看到了一个博客,感觉不错。

完美的解决了我的问题,链接如下http://blog.csdn.net/shihoongbo/article/details/47677159

下面这一段全都来自他的博客,大家去给他点个赞吧!

记住,使用下述方法之前:使用Sublime-Text 或者Notepad++更改一下编码方式(很重要)



//-------------------------------------------------------【完美解决方案】----------------------------------------------------------------------

升级到Qt5.X之后,原先解决的Qt显示中文乱码的方法突然不适用了,找了很多方式来解决这个问题
第一种:
在公司代码里看到的方法,先将对应的cpp文件用windows自带的记事本打开,另存为UTF-8格式,然后在代码中,遇到中文字符,使用QStringLiteral("中文")进行修饰
这种方式每次新建一个class就要切出去用记事本编辑一下实在麻烦,而且每个中文字符串都要用QStringLiteral来修饰,实在麻烦
后来又找到了个方法

第二种:
在头文件申明中加上
#pragma execution_character_set("utf-8")
一切OK了
2016-10-8补充
PS:方法2只是用在Qt5最初的某个版本上大概是两三年前的某个版本,当初使用是可以解决中文显示问题
最近用Qt5.6 5.7两个版本,这个方法已经不行了。各位还是继续使用方法1来显示中文字符

—————————————这是一条浪荡的分割线—————————————————
2017.3.20更新
专门找了资料,把目前测试能用的解决中文字符乱码的方法整理的一下
环境:VS2015   Qt5.7

QString str1=QStringLiteral("中文字符");QString str2=QString::fromLocal8bit("中文字符");QString str3=QString::fromWCharArray(L"中文字符");QString str4=u8"中文字符";    //好像这种方法只适合C++11以上版本
//-------------------------------------------------------------------------------------------------------------------------

几种方法我都试了,均可以解决中文乱码问题

最简单的,在用到中文的CPP文件的头文件申明中加上#pragma execution_character_set("utf-8")

效果如下:(一劳永逸,窃喜自己是5.5版本的)


下面第二种:QStringLiteral


第三种:QString::fromLocal8bit


最后一种:QString::fromWCharArray(L"中文字符")

注意:后面的字符串前面有一个L

第一个情况:没有加L(提示参数出错)


情况二:加上L


很爽,这个问题算是翻篇了。


原创粉丝点击