QT messagebox 乱码解决

来源:互联网 发布:av去码软件 编辑:程序博客网 时间:2024/06/06 00:03

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>
    6using namespace std;
    7 
    8int 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>
    6using namespace std;
    7 
    8int 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>
    6using namespace std;
    7 
    8int 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

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

      1#include "mainwindow.h"
      2#include <QApplication>
      3#include <QMessageBox>
      4#include <QFileDialog>
      5#include <iostream>
      6#include <QTextCodec>
      7using namespace std;
      8 
      9int 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 0