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以上版本已經取消了這兩個函式。
重新觀察以上代碼
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
好的,這裡的codecForLocale()是一個空參數,這代表著一個很可怕的事實:使用系統指定的字元集。那么會出現在英文系統、日文系統上再次亂碼的情況,就算參數寫上("gb18030"),任然解決不了問題。
那么,真的就沒有辦法了嗎?
解決方案
unicode可以實現跨語言。具體的我們可以使用fromLocal8Bit();
QLabel label;labell.setText(QString::fromLocal8Bit("你好,Qt"));