QT messagebox 乱码解决

http://www.mutouxiaogui.cn/blog/?p=277


Qt 中文乱码

使用 Qt 经常可能遇到中文乱码的问题,这里介绍一下 Qt 中文窗口和路径乱码的解决方法。我的环境是 Qt5.2 VS2012 Windows8.1 64bit。

Qt 中文乱码原因

关于 Qt 中文乱码的原因以及在 Qt4 中解决中文乱码问题,推荐参考博文:qt中文乱码问题

Qt4 中 QTextCodec 的很多函数在 Qt5 中都没有了,因此适用与 Qt4 的解决方法对 Qt5 无效。具体可以查看 Qt 的官方文档:
Qt4
Qt5

Qt5 中文乱码解决

下面分别介绍无 BOM UTF-8、有 BOM UTF-8 和 GBK 编码下 Qt 窗口、路径以及 cout 输出中文路径乱码的解决方法。

  1. 无 BOM UTF-8

    由于 Qt5 内部使用 Unicode 编码,对于无BOM UTF-8 编码的源文件,可以直接使用字符串而不需特殊转换。
    测试程序如下:

    1 #include "mainwindow.h"
    2 #include <QApplication>
    3 #include <QMessageBox>
    4 #include <QFileDialog>
    5 #include <iostream>
    6 using namespace std;
    7  
    8 int main(int argc, char *argv[])
    9 {
    10   QApplication a(argc, argv);
    11   MainWindow w;
    12   w.setWindowTitle("无BOM UTF8 中文标题");
    13   w.show();
    14   QString dir = QFileDialog::getExistingDirectory(&w);
    15   cout << dir.toLocal8Bit().data() << endl;
    16   QMessageBox::information(0, "MessageBox 文件路径", dir);
    17  
    18   return a.exec();
    19 }

    程序运行结果如下图:
    无BOM UTF-8

  2. 有 BOM UTF-8

    对于带 BOM 的 UTF-8 文件,可以使用 QString::fromLocal8Bit 的方法解决乱码问题,测试程序如下:

    1 #include "mainwindow.h"
    2 #include <QApplication>
    3 #include <QMessageBox>
    4 #include <QFileDialog>
    5 #include <iostream>
    6 using namespace std;
    7  
    8 int main(int argc, char *argv[])
    9 {
    10   QApplication a(argc, argv);
    11   MainWindow w;
    12   w.setWindowTitle(QString::fromLocal8Bit("有BOM UTF8 中文标题"));
    13   w.show();
    14   QString dir = QFileDialog::getExistingDirectory(&w);
    15   cout << dir.toLocal8Bit().data() << endl;
    16   QMessageBox::information(0, QString::fromLocal8Bit("MessageBox 文件路径"), dir);
    17  
    18   return a.exec();
    19 }

    程序运行结果如下图:
    有BOM UTF-8

  3. GBK

    对于 GBK 编码的文件,同样可以使用 QString::fromLocal8Bit 的方法解决,测试程序如下:

    1 #include "mainwindow.h"
    2 #include <QApplication>
    3 #include <QMessageBox>
    4 #include <QFileDialog>
    5 #include <iostream>
    6 using namespace std;
    7  
    8 int main(int argc, char *argv[])
    9 {
    10   QApplication a(argc, argv);
    11   MainWindow w;
    12   w.setWindowTitle(QString::fromLocal8Bit("GBK 中文标题"));
    13   w.show();
    14   QString dir = QFileDialog::getExistingDirectory(&w);
    15   cout << dir.toLocal8Bit().data() << endl;
    16   QMessageBox::information(0, QString::fromLocal8Bit("MessageBox 文件路径"), dir);
    17  
    18   return a.exec();
    19 }

    程序运行结果如下图:
    GBK

    1. 对于 Qt5 中的 QTextCodec 貌似并不能解决乱码问题,测试程序如下:

      1 #include "mainwindow.h"
      2 #include <QApplication>
      3 #include <QMessageBox>
      4 #include <QFileDialog>
      5 #include <iostream>
      6 #include <QTextCodec>
      7 using namespace std;
      8  
      9 int main(int argc, char *argv[])
      10 {
      11   QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
      12   QApplication a(argc, argv);
      13   MainWindow w;
      14   w.setWindowTitle("GBK 中文标题");
      15   w.show();
      16   QString dir = QFileDialog::getExistingDirectory(&w);
      17   cout << dir.toLocal8Bit().data() << endl;
      18   QMessageBox::information(0, QString::fromLocal8Bit("MessageBox 文件路径"), dir);
      19  
      20   return a.exec();
      21 }

      程序运行结果如下图:
      QTextCodec 设置编码


      关于 Qt 中文乱码的问题就简单介绍到这里,有任何问题或建议欢迎在下面的评论框中留言共同探讨。thx

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值