qt對(duì)國際化有很好的支持。但默認(rèn)的是unicode編碼。中文系統(tǒng)下默認(rèn)的并非unicode,
而是比如gbk或gb2312。所以在進(jìn)行const char*參數(shù)傳遞和顯示時(shí)必須特別注意。
比如在默認(rèn)情況下
QMessageBox::information(this, "Test", "這是一個(gè)測(cè)試");
中文字符無法正確顯式
又如
bool connect(const char * connectString);
你如果輸入
QString str("一個(gè)測(cè)試");
connect((const char*)str);
默認(rèn)是調(diào)用QString.latin1()方法,是直接從Unicode的QString返回latin-1字符表示
集。在中文系統(tǒng)下有時(shí)不是你想要的。
解決方案:在main.cpp里增加
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
這時(shí)涉及到QString/QCString到const char*的轉(zhuǎn)換將使用本地的編碼集。
類似的還有setCodecForTr()方法。
NOTE: 這跟qt使用unicode進(jìn)行內(nèi)部通訊、顯示并不沖突。當(dāng)顯示一個(gè)const char*時(shí),
qt會(huì)將const char*再行轉(zhuǎn)成unicode。
另一種麻煩點(diǎn)的方法:
在寫QT程序的時(shí)候,怎樣使用中文?QT內(nèi)建了國際化支持,可以使用國際化支持來實(shí)現(xiàn)。但,比較復(fù)煩瑣,那怎么簡單地使用中文呢?
QT 的QString內(nèi)部是使用Unicode編碼的,在寫源碼的時(shí)候,可以使用本地的GB2312/GBK/GB18030,或者UTF8編碼。如果是使用前者的話,那可以使用QString::fromLocal8Bit("本地中文字符串")來得到想要的結(jié)果。如果是使用后者的話,可以使用 QString::fromUtf8("UTF8編碼格式的中文字符串")來得到想要的結(jié)果。
posted on 2005-11-23 17:54
halCode 閱讀(5282)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
Qt編程