欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Qt输入中文出现乱码的解决方法

程序员文章站 2022-03-09 13:41:13
...

Qt中输入中文出现乱码的解决方法(简单有效)

1.问题简介

在Qt程序中有时候存在程序中输入中文,运行之后乱码的情况,如使用最简单的QMessageBox弹框

QMessageBox::warning(0, tr("选择用户"),
                             tr("请先从用户列表选择要传送的用户!"), QMessageBox::Ok);

会出现这样的效果

Qt输入中文出现乱码的解决方法

这种情况出现的原因有

  • 在将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);
  • 效果如下

Qt输入中文出现乱码的解决方法
这种方法虽然相较于其他方法可能有点复杂,但却是一种很有效的解决方法,只需要定义一个全局变量,就可以解码输入中文

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();
}

我试了这种方法,但是没能成功(┭┮﹏┭┮)

相关标签: QT qt5