Qt中输入中文出现乱码的解决方法(简单有效)
1.问题简介
在Qt程序中有时候存在程序中输入中文,运行之后乱码的情况,如使用最简单的QMessageBox弹框
复制代码
1
2
3QMessageBox::warning(0, tr("选择用户"), tr("请先从用户列表选择要传送的用户!"), QMessageBox::Ok);
会出现这样的效果
这种情况出现的原因有
- 在将Linux上编写的程序移植到其他平台
- 将Qt4的应用转移至Qt5的开发环境下
前者是因为在 Linux上的Qt开发环境下编写的Qt项目程序默认使用的是UTF-8的编码,转移至其他平台因为同样的开发环境存在不同编码的关系,所以导致乱码现象。后者则更多是因为配置环境的原因,这里主要介绍因移植项目导致的编码混乱出现的乱码问题
2.问题解决
1)最有效的解决
- 本人亲测这种方法简单且有效,首先需要定义一个编码变量,在相关头文件中定义
复制代码
1
2
3//添加头文件 #inclue <QTextCodec>
复制代码
1
2
3//声明变量 QTextCodec * unCodec = QTextCodec::codecForName ( "GBK" ); // 用于解码
- 调用格式如下
复制代码
1
2unCodec->toUnicode("测试")
- 使用上面的例子,将代码更改如下
复制代码
1
2
3
4//替换掉原语句中的tr()字符串函数,用于解码 QMessageBox::warning(0, unCodec->toUnicode("选择用户"), unCodec->toUnicode("请先从用户列表选择要传送的用户!"), QMessageBox::Ok);
- 效果如下
这种方法虽然相较于其他方法可能有点复杂,但却是一种很有效的解决方法,只需要定义一个全局变量,就可以解码输入中文。
2)其他方法
这其他方式是我在网上查找其他人总结的方法,我试了下,不知道是否是环境(Qt5)的原因还是使用方法问题,未能如上述方法一样成功达到目的。但还是将方法给出如下
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19//主函数中修改,同样需要添加头文件 -- Qt5 int main(int argc, char *argv[]) { QApplication a(argc, argv); /*修改部分*/ QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); //视系统编码而定,选择下列的一种方式,大多数是第一句 QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312")); //QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); /*修改部分*/ Widget w; w.show(); return a.exec(); }
我试了这种方法,但是没能成功(┭┮﹏┭┮)
最后
以上就是虚心项链最近收集整理的关于Qt输入中文出现乱码的解决方法Qt中输入中文出现乱码的解决方法(简单有效)的全部内容,更多相关Qt输入中文出现乱码内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复