setCodecForTr()

setCodeForTr(),Qt函式,包含於標準頭檔案QTextCodec,類QTextCodec中,主要功能是用於調整qt文字編碼,使非英文字元可用。

調用時,使用QObject類中的tr來使用

基本介紹

  • 外文名:setCodeForTr()
  • 語言:C++
  • 程式框架:Qt
  • 成員函式:是
  • 頭檔案:QTextCodec
  • :QTextCodec
  • 支持:Qt5-(不含)
實例,致命弱點,弱點,解決方案,

實例

通過setCodecForTr()實現視窗中文輸出
1
//project name:hello//main.cpp#include<QApplication>#include<QLabel>#include<QTextCodec>#include "hello.h"// 此處省略int main(int argc,char * argv[]){QApplication a(argc,argv);QTextCodec::setCodecForTr(QTextCodec::codecForLocale());/*修改字元編碼,取消UTF-8帶來的亂碼,請注意codecForLocale,我們稍後將重點討論這個函式*/QDialog w;Qlabel label(&w);label.setText(QObject::tr("你好,Qt!"));w.show();return a.exec;}

致命弱點

弱點

可能不少讀者會發現,自己解決了中文亂碼的難題,感覺這個函式和codecForLocale()很是好用,但是這裡要提一下它的致命弱點,其實建議這兩個函式不要使用,Qt5以上版本已經取消了這兩個函式。
字元集決定了Qt中文字能否正常使用,如果未指定字元集,會直接按照UTF-8來處理字元串。
重新觀察以上代碼
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
好的,這裡的codecForLocale()是一個空參數,這代表著一個很可怕的事實:使用系統指定的字元集。那么會出現在英文系統、日文系統上再次亂碼的情況,就算參數寫上("gb18030"),任然解決不了問題。
那么,真的就沒有辦法了嗎?

解決方案

unicode可以實現跨語言。具體的我們可以使用fromLocal8Bit();
QLabel label;labell.setText(QString::fromLocal8Bit("你好,Qt"));

相關詞條

熱門詞條

聯絡我們