嵌入式Qt方案中文显示系列:应用程序本地中文显示的实现

嵌入式Qt应用程序进行中文显示有两种解决方案,一种是直接在代码中使用中文,利用QTextCodec类来实现,另外一种是使用qt平台的国际化支持机制,经过语言翻译来实现。第一种方案直接明了,相对来讲也简单方便一点,除了编码时麻烦点(来回切换输入法),而第二种方法的优势是具备良好的扩展性,代码中所有使用英文,而后使用中文翻译文件来进行语言翻译,当须要其它语言方案时,只须要添加翻译文件就能够。这里先介绍第一种方案,以后再写第二方案的文章。 app

方案实现

直接使用中文,利用QTextCodec类来实现中文的显示方案实现经过下面的三个步骤: 函数

  1. 中文字体文件的存在:前文提到过字体文件的内容,文泉驿字体库是支持中文的。
  2. 应用程序代码中QTextCodec的设置和QFont字体的设置:对整个应用程序来讲,通常是放在main函数中进行设置,大概的代码以下:
  3. 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的区别:
    • TextCodec:上面app.setDefaultCodec(codec)语句设置的TextCodec编码格式是指代码源文件的编码格式,不一致则没法会出现中文乱码。
    • Font: 上面设置的字体是说明应用使用的字体格式,这个参考前文的内容很好理解,字体的参数内容若是和字体文件的不一致,也只会使用最接近的字体文件格式,指定的参数无效,即若是只有wenquanyi_160_75.qpf字体文件,那么设置下面的字体和上面的设置效果是同样的。
    app.setFont(QFont("wenquanyi",22,87,FALSE,QFont::Unicode));
  4. 第三步就是在源代码文件中直接编辑使用中文,而后确保该源文件的编码格式和上面TextCodec中设置的格式是一致的。若是不一致,例如TextCodec设置的是“GBK",而源文件用的确是UTF-8格式,则中文显示乱码——我曾遇到的问题,改为一致后就OK了。

只要确保上面三步都是正确的,就能够实现qte应用程序中的中文显示了。 字体

关于QObject::tr()函数与中文显示的说明

上面的方案实现中文的显示,是能够不使用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编码格式,以识别翻译出的文本,指定的编码格式应该和翻译信息文件中的编码格式一致。这些将在第二方案的文章中进行更多的说明。 设计

相关文章
相关标签/搜索