事情不断搁置,导致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
很爽,这个问题算是翻篇了。