嵌入式Qt應用程序進行中文顯示有兩種解決方案,一種是直接在代碼中使用中文,利用QTextCodec類來實現,另外一種是使用qt平臺的國際化支持機制,經過語言翻譯來實現。第一種方案直接明瞭,相對來講也簡單方便一點,除了編碼時麻煩點(來回切換輸入法),而第二種方法的優勢是具備良好的擴展性,代碼中所有使用英文,而後使用中文翻譯文件來進行語言翻譯,當須要其它語言方案時,只須要添加翻譯文件就能夠。這裏先介紹第一種方案,以後再寫第二方案的文章。 app
直接使用中文,利用QTextCodec類來實現中文的顯示方案實現經過下面的三個步驟: 函數
int main(int argc, char *argv[]) { QApplication app(argc,argv); ... QTextCodec* codec = QTextCodec::codecForName("UTF-8"); app.setFont(QFont("wenquanyi",16,75,FALSE,QFont::Unicode)); app.setDefaultCodec(codec); ... return app.exec(); }這裏須要說明一下TextCodec和Font的區別:
app.setFont(QFont("wenquanyi",22,87,FALSE,QFont::Unicode));
只要確保上面三步都是正確的,就能夠實現qte應用程序中的中文顯示了。 字體
上面的方案實現中文的顯示,是能夠不使用QObject::tr()函數的,由於該函數是針對第二種方案設計的。 編碼
看一下該函數的源代碼: 翻譯
QString QObject::tr( const char *text, const char * comment ) { if ( qApp ) return qApp->translate( "QObject", text, comment ); else return QString::fromLatin1(text); }它使用QApplication類的translate翻譯函數對輸入參數text進行翻譯,輸出翻譯的字符串。translate函數的原型:
QString QApplication::translate ( const char * scope, const char * key, const char * comment ) const;該函數查找已經安裝好的翻譯信息文件,對key參數進行查找翻譯,若是找到則返回翻譯後的文本字串,若是找不到或者不存在相應的信息文件,則直接返回key自己,即不進行翻譯。
所以能夠看出,在第一種方案中,咱們沒有安裝翻譯器和翻譯信息文件,也就沒有必要使用QObject::tr()函數。實際上在使用tr時,還支持專門爲tr翻譯的文本指定TextCodec編碼格式,以識別翻譯出的文本,指定的編碼格式應該和翻譯信息文件中的編碼格式一致。這些將在第二方案的文章中進行更多的說明。 設計