Qt creator 如何支持中文编码(Qt4和Qt5解决方法不同)

一、首先讲Qt5:

首先Qt5是直接支持中文的,用tr(“输入中文即可”)包含就能显示中文(不用像Qt4一样添加修改代码)

ps:但是我里边有中文符号“:”冒号时就会报错,,求大神讲解问什么?提示如下:

解决方法是:换成英文的":"冒号就没问题了

二、另外讲Qt4如何支持中文:

非常固定的方法,如下:

1.在main()函数前#include<QTextCodec>

2.在QApplication
a(argc,
argv);下面添加:

QTextCodec::setCodecForTr(QTextCodec::codecForName(QTextCodec::codecForLocale()->name()));     QTextCodec::setCodecForLocale(QTextCodec::codecForName(QTextCodec::codecForLocale()->name()));   QTextCodec::setCodecForCStrings(QTextCodec::codecForName(QTextCodec::codecForLocale()->name());

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

三、粘贴另外一个写的比较好的帖子,更加详细写了Qt5相较Qt4的改变

  • 在Qt4中,国内很多新手都喜欢——不分青红皂白地使用如下3行代码
QTextCodec::setCodecForTr(...)
QTextCodec::setCodecForCStrings(...)
QTextCodec::setCodecForLocale(...)

尽管之前零零散散写过一点这方面的内容,比如

但是,敢死队员还是一批一批的 ... 让人少多有些无奈

症结?

在国内,之所以用很多人用这3行代码,是因为他们在源代码的const char*这种窄字符串中使用了中文。

然后,发现。不对啊,咋全是乱码呢?于是上网搜索,发现其他人用的这3行代码

于是,加上试试。发现:在自己的当前环境下(固定系统、固定地区语言设置、固定编译环境)还真的没有乱码了。

于是乎?完全不考虑那3行代码的作用了,反正自己能用就行了,管它什么副作用呢!!

Qt5

在Qt5中,这个问题终于不复存在了,因为

这两个函数

QTextCodec::setCodecForTr(...)
QTextCodec::setCodecForCStrings(...)

被直接去掉了。

这样一来,受影响的直接是如下代码了:

QString s1 = "我是中文";
QString s2("我是中文");
QString s3 = QObject::tr("我是中文")

好消息/坏消息?

  • 坏消息

现在Qt5中尽管去掉了setCodecXXX这两个函数,但是默认编码还是latin1。如果你要想使用

"我是中文"

这样的字符串,必须自己使用QTextCodec或这QString::fromXXX 这种东西进行转换

  • 好消息 是:

Qt5发布之时,默认将会是utf8编码,完全可以将你从Qt编码问题解放出来。

  • 坏消息,如果使用的是 MSVC2005/2008/2010,可能无法使用utf8编码,于是

下面的代码

QString s1 = "我是中文";
QString s2("我是中文");
QString s3 = QObject::tr("我是中文")

将不会工作。

  • 因为从MSVC2005起,你无法给编译器设置字符串要使用的编码。尽管2003之前,也无法设置,但是它会遵循源码文件的编码。而2005就自作聪明了,即使你源码文件保存成不带BOM的utf8,它都会试图帮你转换一下。
  • 好消息是什么呢?

如果你在Windows下,且使用的是MinGW,那么只要你将源码文件保存成utf8,前面的代码将直接可以工作(无须其他设置)

如果你在其他平台了,那么应该都默认是utf8文件。同样无须进行设置。

  • 好消息

如果你的编译器支持C++11,那么,你可以直接使用

QString s = u8"我是中文";
  • 坏消息

主流编译器还都不怎么支持C++11

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 15:22:48

Qt creator 如何支持中文编码(Qt4和Qt5解决方法不同)的相关文章

怎么在Ubuntu OS上面安装搜狗输入法及对Qt Creator的支持

搜狗输入法是一个非常流行的输入法.在Ubuntu系统上没有默认安装这个输入法.在网上搜索,会发现不同的网站给出不同的方法.有些是工作的,有些不工作.现在,这里我把我的体会及安装步骤写下来.希望对开发者们有帮助.中文输入法对我们在Ubuntu Phone上开发中文的应用也是非常有帮助的.安装好中文输入法,我们可以在Qt Creator及Scope的测试工具中输入汉字来开发我们的中文应用. 1)首先下载"搜狗输入法for Linux" 我们可以到如下的网站"http://piny

node-webkit 不支持html5_video播放mp4的解决方法

原因: mp4似乎是有专利的影音格式.node-webkit不对其进行支持…… 似乎是.. 解决方法 : 在本地安装chrome浏览器,进行安装目录(例:c:\Google\Chrome\Application\37.0.2062.103),找到ffmpegsumo.dll文件. 复制(ffmpegsumo.dll)并替换node-webkit目录下的ffmpegsumo.dll. 注:由于chromium 版本众多,所以,下载的chrome浏览器的chromium版本要与node-webkit

ASP.net MVC3 报错"未找到视图“Index”或其母版视图,或没有视图引擎支持搜索的位置 "的解决方法

注意添加MVC3视图不能直接在View文件下新建视图,而是在控制器的Index 右击添加视图,就会在View下面产生一个Product文件夹(包含Index.cshtml) 就可以解决这个问题. 具体如图: 参考:[ASP.NET MVC 小牛之路]Razor语法 ASP.net MVC3 报错"未找到视图"Index"或其母版视图,或没有视图引擎支持搜索的位置 "的解决方法

IE8及低版本浏览器不支持CSS3 media queries的解决方法

问题:IE8及其以下低版本IE浏览器在缩小窗口时,UI没有按照相应的要求显示窗口缩小时对应的布局:其他浏览器正常. 定位过程: 其实开始拿到问题时是无从下手,不知所以然,根本就没听说还有media这个CSS属性,就更不知道它的功能了.但是对于解决UI问题,有自己的一套思路,就是首先要思考为什么会错误以及为什么没有错误两个方面,然后针对这两个方面的疑问把html或js或css文件简化再简化,修改再修改,查看UI变化,从而缩小问题范围,最后找出问题根源. 如此我就想为什么其他浏览器界面布局没有问题呢

关于2.4版本以后apache/httpd开始不支持下划线header的解决方法

官方文档给出的解释:http://httpd.apache.org/docs/current/env.html#fixheader (以下摘自官方文档,英文不想看的可以直接看忽略..直接从下划线后内容开始) ------------------------------ Passing broken headers to CGI scripts Starting with version 2.4, Apache is more strict about how HTTP headers are c

Error:不支持发行版本5的解决方法

今天使用 mac Idea maven 测试 Spring annotation 配置,在编写好测试方法后,执行显示 Error:不支持发行版本5 解决方法如下: 再次执行 ok 原文地址:https://www.cnblogs.com/KennyWang0314/p/12268953.html

(八十三)第三方类库不支持64位处理器的解决方法

当Xcode编译提示Undefined symbol for architecture x86_64时,说明当前框架不支持64位系统,要使用该框架,只需要修改工程设置即可. 打开Build Settings,选择Architecture标签,按照下面的图片设置:在ARCHS_STANDARD后面加_32_BIT 版权声明:本文为博主原创文章,未经博主允许不得转载.

IE11不支持Selenium 2.0的解决方法

题前话(Pre-words) 希望使用Selenium 2.0的人看到这篇文章能够收藏此文,以后遇到该问题,再也不用花费多余的时间进行research了!本文就是对网上所有千奇百怪各种各样的search结果所做的最好总结. 问题概述(Question) IE11不支持Selenium 2.0,在什么情况下不支持呢?比如:获取通过WebDriver获取页面上的元素时,你经常会捕获到这样的异常: OpenQA.Selenium.NoSuchWindowException: Unable to fin

让ie浏览器支持html5新标签的解决方法(使用html5shiv)

没估计错的话旧版浏览器都是不识别这些新增的标签所以都是用行内元素来处理解决的,所以,有一个解决办法的突破口就是让它变成块状元素就不会处于同一行了,这样在新旧浏览器都是可以显示同样的效果,再者就是让浏览器识别标签,需要新增标签,具体解决办法是: IE8/IE7/IE6支持通过document.createElement方法产生的标签,可以利用这一特性让这些浏览器支持HTML5新标签,代码如下: document.createElement('新标签'); / /新增创建新标签   方式一:Codi