Qt 開發中文顯示亂碼是新手必遇的坑。值得注意的是,UI 設計器(.ui 檔)中的中文通常正常,問題集中在程式碼中的字串常量與變數。
早期常見 QTextCodec::setCodecForTr/locale/CStrings,但在 Qt5 中這些函數已移除,且不推薦使用。
QStringLiteralQMessageBox::information(this, QStringLiteral("標題"), QStringLiteral("中文內容"));
QStringLiteral 在編譯期直接生成 QString,效能最佳且完美支援 UTF-8 原始碼。
QString::fromLocal8Bit() 或 fromUtf8()char *info = "動態中文";
QString strInfo = QString::fromLocal8Bit(info); // 系統本地編碼
// 或
QString strInfo = QString::fromUtf8(info); // 明確指定 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();
}
QStringLiteral,零開銷、最安全。fromUtf8()/fromLocal8Bit(),明確宣告來源編碼。QTextCodec::setCodecFor* 系列函數。