嵌入式系统
QT中文字体的显示方法
2013-03-25 17:18  浏览:38
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); 则程序运行后,控件显示时直接会显示中文字体“你好”
发表评论
0评