之前使用师兄移植好的QT环境进行QT程序开发,对移植的难度没有充分的认识。今天有些空闲时间,就在网上查了一些资料,对nokia新出的QT4.6.2进行了移植。在这里感谢arm9之家的各位老大,在国内做移植最好的团队果然还是友善之臂:)。自勉如下:学无止境,所以仍需继续努力!
下面进入正题,移植方面大家可参考arm9之家ppacctv兄的"Fedora12下搭建Qt Creator的ARM开发环境并移植Qt4.6.2到Micro2440"文章,上面过程应该算是非常详细,我侧重移植后的中文显示配置做一些补充:
一、在qvfb上运行时,中文完全没有显示,但是同一字符串中英文字符可以显示出来。例如“哈哈ha”只显示“ha”。应该是字体库移植问题,可以在网络上下载开源的文泉驿字体库,个人认为该字库在美观方面做的非常好。将wqy-zenhei.ttc复制到安装好的Trolltech/QtEmbedded-4.6.2/lib/fonts中,运行qt程序时加上-fn wqy-zenhei选项就可以了。
二、在默认的情况下,qvfb会调用字符库中的"DejaVu Sans" 系列字体(可以通过QFont对象看到默认字体,如: QFont font; qDebug()<<font.family();),但如果找不到默认字体qvfb就会搜索fonts目录中的其他字体,所以也可以通过把其他字体都删除的办法,只留下wqy-zenhei.ttc。就不必加-fn wqy-zenhei选项了。
三、可通过设置环境变量:export QT_QWS_FONTDIR=$path-to-your-fontdir指向你自己的字体目录。当默认的Trolltech/QtEmbedded-4.6.2/lib/fonts中没有可用字体时,会查找该目录。
四、QT默认的编码(unicode)在显示中文的过程中会出现乱码(注意区别于第一条的完全没有显示),主要是由于源代码文件的中文字符编码是utf8或者gbk等(与编辑器设置有关)。QT中的QTextCodec类专门用于处理编码问题。以文件编码为utf8为例,代码中增加:
#include <QTextCodec>
main()
{
QApplication app(argc,argv);
QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));
QLabel hello(QObject::tr("你好") );
}
也可以用codecForLocale函数来返回现在系统的默认编码,这样更容易做多编码的程序而不用自己手动来更改具体的编码。