Qt——乱码最有效的解决办法


  在网上看到很多关于Qt乱码的处理方法,但是我觉得最有效的还是从源码去解决,参考系统为我们生成的文件是最有效的解决途径
  根据Qt编译的流程,如果我们使用了Qt Designer界面编辑器进行界面设计的话,那么在Qt进行编译的时候qmake会为我们在对应的XXXX_build_desktop_Qt_X_X_X_in_PATH__System__Debug文件夹里面生成对应的一个叫ui_XXXX.h的文件,这个文件就是对应的界面文件所生成的头文件。打开它就可以看见其中系统为我们选择的文字格式。
  还有一种打开ui_XXXX.h文件的方法,就是在任何一个.cpp文件中调用ui->xxxxxx然后按住Ctrl然后点击
ui->xxxxxx中的xxxxxx就可以看见ui_XXXX.h文件了。
    
  
  接下来要明白的是我们的目的是解决乱码,这里有两种方式可以解决该问题
  1、完全参考系统的编译方式:所以我们要做的第一步就是在Qt Designer界面编辑器中随便一个控件里输入中文然后保存该文件。第二步使用以上方法找到对应的ui_XXXX.h文件,打开它然后一直往下找(一般是在最后面的void retranslateUi(QWidget *Widget)函数中)可以看见以下代码

    Widget->setWindowTitle(QApplication::translate("Widget", "Widget", 0));
    labInputPic->setText(QApplication::translate("Widget", "\346\227\240\345\233\276", 0));
    labOutputPic->setText(QApplication::translate("Widget", "\346\227\240\345\233\276", 0));
    label->setText(QApplication::translate("Widget", "\346\243\200\346\265\213\347\273\223\346\236\234  \357\274\232", 0));

  注意这个labInputPic和labOutputPic是你刚刚输入中文的控件名字,这里和你的应该不一样,但是这不是重点,重点是QApplication::translate(“Widget”, “\346\227\240\345\233\276”, 0)这一句话,其中系统已经帮我们把你刚刚输入的中文转为对应的中文编码了就是\346\227\240\345\233\276所以你要做的就是把你所有要用到的中文通通用这种方式转为\xxx\xxx\xxx,然后在要用到的地方使用QApplication::translate(“Widget”, “\xxx\xxx\xxx”, 0)函数放置中文即可。
  
  
2、第二种解决方式比较投机但是一般也是可行的:就是使用以上方法找到对应的ui_XXXX.h文件,在该文件中会看到很多引号引起来的字符串,一般是在new完空间之后的setObjectName函数中,在这个函数中会出现系统设置文字的方式如:btnCamCatch->setObjectName(QString::fromUtf8(“btnCamCatch”));用的就是QString::fromUtf8,有些则是QStringLiteral,这个要看你的ui_XXXX.h文件用的是什么,然后在对应要设置中文的位置调用对应的QString::fromUtf8(“中文”)或QStringLiteral(“中文”)设置中文。
  
  
  


以下列举一些网上收到的常用的解决乱码的方法:

QString s1 = "汉语";
QString s2("漢語");
QString s3 = tr("中文")
QString s4 = u8"中文";//C++11
QString s5 = tr(u8"中文");
QString s6 = QStringLiteral("中文");
QString s7 = QString::fromLocal8Bit("中文");
QString s8 = QString::fromUtf8("中文");
QString s9 = QString::fromWCharArray(L"中文");
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值