我是靠谱客的博主 虚心项链,最近开发中收集的这篇文章主要介绍Qt输入中文出现乱码的解决方法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();
}

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

最后

以上就是虚心项链为你收集整理的Qt输入中文出现乱码的解决方法Qt中输入中文出现乱码的解决方法(简单有效)的全部内容,希望文章能够帮你解决Qt输入中文出现乱码的解决方法Qt中输入中文出现乱码的解决方法(简单有效)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部