您的位置:首页 > 编程语言 > Qt开发

QT中文字体的显示方法

2016-05-20 19:23 381 查看
                QT中文字体的显示方法

一、QT显示中文失败的原因,如显示为方块或乱码

1)qte的库未编译进对中文textcodec的支持,解决方案:修改qconfig-qpe.h, 去掉CODEC有关的宏,重新configure和make

2)程序中选用的字体不是中文字体(默认的字体是Helvetica,没有中文),需要在程序中指定一个中文字体,如qte自带的unifont,或选用qt4版本里新加入的文泉驿的字体。

 

二、使用翻译器来使用中文

如果考虑到你的程序将来会使用多种不同的语言,则在设计时可以采用翻译器的方法来实现,将来只需替换掉你的翻译文件,就可为程序换掉显示语言,使用中文显示或者其他语言显示等都很方便。

1.       程序中的准备:

  在main.cpp中加入如下代码

QFont font1(“unifont”,16,50,FALSE,QFont::Unicode);

qApp->setFont(font1);

QTranslator *translator = new QTranslator(0);

translator->load("xxx.qm",".");

qApp->installTranslator(translator);

2.翻译文件制作方法:

1)findtr 文件名(通常为CPP文件) > xxx.po

findtr *.cpp >xxx.po  产生一个新的po

mergetr xxx.po  aa.po  //合并到旧的po文件中

2)编辑po文件,其中charset需由iso-8859-1改为GB2312,然后将里面的待翻译文字逐个翻译。如“main button”翻译成“主按钮”

3)msg2qm –scope zh_CN.GB2312 xxx.po xxx.qm   转为二进制翻译文件

 

3.程序中的使用

所有需要翻译的文字在程序代码中用tr包含起来,如:

QButtonGroup *buttongrp=new QButtonGroup(tr("main button"),this);

则程序运行后,控件显示时直接会显示中文字体“主按钮”

4.其他应用

对于控件中动态可变的文字的汉化,可采用数组方式,加入关键字QT_TRANSLATE_NOOP:

static const char* strings[] = {

                     QT_TRANSLATE_NOOP("MyWindow", "Hello" ),   //前一个是类名,后一个是字符串

                     QT_TRANSLATE_NOOP( " MyWindow ","World" )

              };

使用时如button->setText(tr(strings[0]));

即可从翻译文件中取出Hello的中文翻译“你好”,动态的显示在按钮空间上。

三、直接在程序中写入中文

程序中的准备:

在main.cpp中加入如下代码

app.setDefaultCodec(QTextCodec::codecForName("GBK"));设置字符编码      font1("unifont",16,50,FALSE,QFont::Unicode);  建立字体

       qApp->setFont(font1); 设置字体

程序中使用中文:

QButtonGroup *buttongrp=new QButtonGroup(tr("你好"),this);

则程序运行后,控件显示时直接会显示中文字体“你好”

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  QT 中文字体 显示