首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

Qt5 中文顯示亂碼完整解決方案

     編輯:C++ 入門

問題背景

Qt 開發中文顯示亂碼是新手必遇的坑。值得注意的是,UI 設計器(.ui 檔)中的中文通常正常,問題集中在程式碼中的字串常量與變數。

Qt4 時代的舊作法(已棄用)

早期常見 QTextCodec::setCodecForTr/locale/CStrings,但在 Qt5 中這些函數已移除,且不推薦使用。

Qt5 推薦的最佳實踐

1. 字串常量:使用 QStringLiteral

QMessageBox::information(this, QStringLiteral("標題"), QStringLiteral("中文內容"));

QStringLiteral 在編譯期直接生成 QString,效能最佳且完美支援 UTF-8 原始碼。

2. 字串變數:使用 QString::fromLocal8Bit() 或 fromUtf8()

char *info = "動態中文";
QString strInfo = QString::fromLocal8Bit(info); // 系統本地編碼
// 或
QString strInfo = QString::fromUtf8(info);      // 明確指定 UTF-8

3. 原始碼檔案編碼統一為 UTF-8

  • Visual Studio:儲存時選「Unicode (UTF-8 帶簽名) - 程式碼頁 65001」
  • Qt Creator:預設即為 UTF-8
  • 專案檔 .pro 加入:CODECFORTR = UTF-8(Qt5 可選)

完整範例

#include <QApplication>
#include <QMessageBox>

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);
    
    // 常量字串
    QMessageBox::information(nullptr, 
        QStringLiteral("歡迎"), 
        QStringLiteral("Qt5 中文顯示正常!"));
    
    // 變數字串
    std::string utf8_str = u8"動態載入的中文";
    QString qstr = QString::fromUtf8(utf8_str.c_str());
    QMessageBox::information(nullptr, QStringLiteral("提示"), qstr);
    
    return a.exec();
}

核心原則總結

  1. 原始碼存 UTF-8,編譯器才能正確解析中文字面值。
  2. 常量用 QStringLiteral,零開銷、最安全。
  3. 變數用 fromUtf8()/fromLocal8Bit(),明確宣告來源編碼。
  4. 棄用 QTextCodec::setCodecFor* 系列函數。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved