Qt输入中文出现乱码的解决方法
程序员文章站
2022-03-09 13:41:13
...
Qt中输入中文出现乱码的解决方法(简单有效)
1.问题简介
在Qt程序中有时候存在程序中输入中文,运行之后乱码的情况,如使用最简单的QMessageBox弹框
QMessageBox::warning(0, tr("选择用户"),
tr("请先从用户列表选择要传送的用户!"), QMessageBox::Ok);
会出现这样的效果
这种情况出现的原因有
- 在将Linux上编写的程序移植到其他平台
- 将Qt4的应用转移至Qt5的开发环境下
前者是因为在 Linux上的Qt开发环境下编写的Qt项目程序默认使用的是UTF-8的编码,转移至其他平台因为同样的开发环境存在不同编码的关系,所以导致乱码现象。后者则更多是因为配置环境的原因,这里主要介绍因移植项目导致的编码混乱出现的乱码问题
2.问题解决
1)最有效的解决
- 本人亲测这种方法简单且有效,首先需要定义一个编码变量,在相关头文件中定义
//添加头文件
#inclue <QTextCodec>
//声明变量
QTextCodec * unCodec = QTextCodec::codecForName ( "GBK" ); // 用于解码
- 调用格式如下
unCodec->toUnicode("测试")
- 使用上面的例子,将代码更改如下
//替换掉原语句中的tr()字符串函数,用于解码
QMessageBox::warning(0, unCodec->toUnicode("选择用户"),
unCodec->toUnicode("请先从用户列表选择要传送的用户!"), QMessageBox::Ok);
- 效果如下
这种方法虽然相较于其他方法可能有点复杂,但却是一种很有效的解决方法,只需要定义一个全局变量,就可以解码输入中文。
2)其他方法
这其他方式是我在网上查找其他人总结的方法,我试了下,不知道是否是环境(Qt5)的原因还是使用方法问题,未能如上述方法一样成功达到目的。但还是将方法给出如下
//主函数中修改,同样需要添加头文件 -- 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();
}
我试了这种方法,但是没能成功(┭┮﹏┭┮)