Chinaunix首页 | 论坛 | 博客
  • 博客访问: 676844
  • 博文数量: 108
  • 博客积分: 3236
  • 博客等级: 中校
  • 技术积分: 906
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-04 21:23
文章分类

全部博文(108)

文章存档

2011年(33)

2010年(75)

我的朋友

分类: LINUX

2010-06-29 20:47:26

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

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

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.翻译文件制作方法:

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

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

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

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

3msg2qm –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);

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

阅读(6956) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~