全部博文(584)
分类: LINUX
2010-11-21 12:10:26
一、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);
则程序运行后,控件显示时直接会显示中文字体“你好”