QT預編譯設置編碼格式
A. QT控制台程序怎麼輸出中文字元
跟Qt關系不大,這和你源文件編碼格式和編譯器有關系。
可以給你個建議把上面的程序改成Qt版本的, 哈哈。步驟如下~
1 是用qtcreator
2 如果是, 檢查
工具--選項--文本編輯器--行為 選項卡下的File Encodings 中,default Encoding下拉選框里沒有中文編碼(gbk、gb2132或gb18030等)。我這里是system
3 在程序里
int main(xxxx)
{
QApplication app(xxxx);
QTextCodec::setCodecForTr(QTextCodec::codecForName("system"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("system"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("system"));
qDebug() << QObject::tr("中文");
//記得中文用QObject::tr()包裹起來,這樣就可以顯示中文了。
app.exec();
}
B. qt4.6移植到qt4.7出現中文亂碼
網上搜索了3~4天,概括如下:
1、使用setDefaultCodec進行設置;
qApp->setDefaultCodec( QTextCodec::codecForName("GBK") );
QLabel *label = new QLabel( tr("中文標簽") );
可惜setDefaultCodec是QT3的函數,QT4已經不支持了。
2、 設置QObject的成員函數tr()的編碼;
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
3、使用QString的fromLocal8Bit()函數;
QString str;
str = str.fromLocal8Bit("哈哈哈");
hello.setWindowTitle(str);
4、用QTextCodec的toUnicode方法來顯示中文
QLabel hello(QObject::tr("你好").toLocal8Bit());
QTextCodec *codec = QTextCodec::codecForLocale();
QString a = codec->toUnicode("安師大手動");
以上各種都沒有解決問題。
繼續沒有搜索這個問題,終於在一個blog中發現了真正的答案:字型檔問題。
「QT4下發現一個很奇怪的現象,就是對話框的Title「我是對話框」可以正確顯示,而按鈕就是小方塊。總感覺是系統某些設置不對,而不是字元編碼的問題,如果是字元編碼問題,那麼應該是亂碼而不是小方塊。忽然想到網上有提到過是字型檔的問題,覺得現象可以解釋,標題欄和按鈕文字不是同一種字體,而恰好按鈕字體沒有,所以是小方塊,而不是亂碼。
網上搜了下QT4用的默認字體,沒有查到,又看了QT4的源代碼,代碼太多,也沒有找到。
不過setFont函數引起了我的注意,在網上看到過這種方法。」
參考上面的內容,修改代碼:
...
QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
QFont font("Times",12,QFont::Normal,FALSE);
app.setFont(font);
...
label.setText(QObject::tr("同一個世界,同一個夢想!"));
...
成功!顯示中文正常!
這個問題的解決真是太重要了,說實話真的有點疲憊,幸好沒有放棄。yeah!
後記:使用qt的designer時,發現界面還是亂碼。使用qtconfig設置font為Bitstream Charter後解決亂碼問題。此時,我想原來的程序是不是也OK?不料一試,果然沒有亂碼~Oh MyGod!
Come From:http://www.linuxdiyf.com/viewarticle.php?id=97025
另外的解決方案:
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/mociml/archive/2010/04/26/5531643.aspx