嵌入式Qt应用程序进行中文显示有两种解决方案,一种是直接在代码中使用中文,利用QTextCodec类来实现,另一种是使用qt平台的国际化支持机制,通过语言翻译来实现。第一种方案直接明了,相对来说也简单方便一点,除了编码时麻烦点(来回切换输入法),而第二种方法的优点是具有良好的扩展性,代码中全部使用英文,然后使用中文翻译文件来进行语言翻译,当需要其它语言方案时,只需要添加翻译文件就可以。这里先介绍第一种方案,之后再写第二方案的文章。
直接使用中文,利用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编码格式,以识别翻译出的文本,指定的编码格式应该和翻译信息文件中的编码格式一致。这些将在第二方案的文章中进行更多的说明。