1. 程式人生 > 其它 >qt中文亂碼處理方法

qt中文亂碼處理方法

技術標籤:qt/c/c++語言linux亂碼ubuntuqt

環境:Windows10

開發工具:VS2017,Qt5.14

1、介面現象

UI介面現象:

程式碼如下:

fLabCurFile=new QLabel;  //用於顯示當前檔名的標籤
fLabCurFile->setMinimumWidth(150);
fLabCurFile->setText(QObject::tr("當前檔案:"));
ui->statusBar->addWidget(fLabCurFile);//新增到狀態列

2、配置系統字型

有遇到同樣問題的提供解決方案,設定系統字型為UTF-8,UTF-8 BOM設定為Add If Encoding IS UTF-8。

Tools->Options->Text Editor->Behavior:

配置好後,並未解決問題。再試,有文章總結出如下四種解決辦法,測試均通過,最後選3.4方法,問題解決。

3、解決方法

3.1、字元轉碼 QString::fromLocal8Bit

缺點,不能與QObject::tr同時使用。

fLabCurFile=new QLabel;  //用於顯示當前檔名的標籤
fLabCurFile->setMinimumWidth(150);
fLabCurFile->setText(QString::fromLocal8Bit("當前檔案:"));
ui->statusBar->addWidget(fLabCurFile);//新增到狀態列

結果:

3.2、字元轉碼 QString::fromWCharArray

缺點,不能與QObject::tr同時使用。且字串需用L修飾。

fLabCurFile=new QLabel;  //用於顯示當前檔名的標籤
fLabCurFile->setMinimumWidth(150);
fLabCurFile->setText(QString::fromWCharArray(L"當前檔案:"));
ui->statusBar->addWidget(fLabCurFile);//新增到狀態列

3.3、字元轉碼 QStringLiteral

缺點,不能與QObject::tr同時使用。

fLabCurFile=new QLabel;  //用於顯示當前檔名的標籤
fLabCurFile->setMinimumWidth(150);
fLabCurFile->setText(QStringLiteral("當前檔案:"));
ui->statusBar->addWidget(fLabCurFile);//新增到狀態列

3.4、預編譯設定字符集編碼

在標頭檔案宣告處宣告:#pragma execution_character_set("utf-8")。優點:不用改程式碼。

fLabCurFile=new QLabel;  //用於顯示當前檔名的標籤
fLabCurFile->setMinimumWidth(150);
fLabCurFile->setText(QObject::tr("當前檔案:"));
ui->statusBar->addWidget(fLabCurFile);//新增到狀態列