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

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

1.问题简介

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

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

会出现这样的效果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aPQVzZcA-1584375408743)(Qt%E8%BE%93%E5%85%A5%E4%B8%AD%E6%96%87%E5%87%BA%E7%8E%B0%E4%B9%B1%E7%A0%81%E7%9A%84%E8%A7%A3%E5%86%B3%E6%96%B9%E6%B3%95.assets/%E4%B9%B1%E7%A0%81%E9%97%AE%E9%A2%982.png)]

这种情况出现的原因有

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

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

发布了43 篇原创文章 · 获赞 7 · 访问量 9021

猜你喜欢

转载自blog.csdn.net/qq_41488943/article/details/104912220
今日推荐