QT中文显示

来源:互联网 发布:网络研修帖子 编辑:程序博客网 时间:2024/06/18 15:29

 QT是跨平台的,我的工作环境,有三个qmake,分别是X11,qtopia-core,qtopia-core-arm。X11用来编译PC可执行的QT程序,qtopia-core编译的程序可在电脑的qvfb中仿真ARM上显示效果,qtopia-core-arm只可以在arm开发板上运行。

    正常显示中文总是遇到问题,花了一阵子搞明白了。

    有两种方法正常显示中文,其实都不难。

    1.用到的字符串都用英文表示,然后利用国际化翻译软件Linguist处理,添加*.qm文件,具体见以前的帖子。粗略理解,这种方法的可移植性好,国际化也比较方便,只要添加不同的*.qm字体文件就好了。

    2.用到的字符串直接用中文表示。这时要重点注意编码和字体,经常会出错。linux系统下大多都是utf8编码方式,如果自己的系统不是,就显示不正常,

    QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));

    可以将utf8换成自己系统的编码方式,例如,XP下一般是gb18030,gb2312,big5或者GBK等等很多。

    如果QT界面显示的全是乱码,那么这时应该就是编码的问题。

    如果QT界面显示的全是空白,那么这时应该就是字体的问题。

    qtopia中可用的字体有限,在qtopia/lib/font里包含了所有可用的字体,可以显示中文的有unifont(只有一种大小),文泉驿(可选择的大小比较多)。

    app.setFont(QFont("wenquanyi", 12, 50));

    有时你会发现X11编译的程序,可以正常显示中文。但是用qtopia-core重新编译一次,确显示不了。因为X11有默认的字体,只要设置了正确的utf8的编码方式,不设置字体也可以正常显示(在编码是UTF8的LINUX下)。(我怀疑QT默认的编码方式是Latin1,待验证)。但是,qtopia-core编译的程序,必须明确显示用的字体,和编码方式。

int main(int argc, char *argv[]){    QApplication a(argc, argv);    a.setFont(QFont("wenquanyi", 12, 50));    QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));    home w;    w.show();    return a.exec();}