QT中文字體的顯示方法
一、QT顯示中文失敗的原因,如顯示為方塊或亂碼
1)qte的庫(kù)未編譯進(jìn)對(duì)中文textcodec的支持,解決方案:修改qconfig-qpe.h, 去掉CODEC有關(guān)的宏,重新configure和make
2)程序中選用的字體不是中文字體(默認(rèn)的字體是Helvetica,沒有中文),需要在程序中指定一個(gè)中文字體,如qte自帶的unifont,或選用qt4版本里新加入的文泉驛的字體。
二、使用翻譯器來使用中文
如果考慮到你的程序?qū)頃?huì)使用多種不同的語言,則在設(shè)計(jì)時(shí)可以采用翻譯器的方法來實(shí)現(xiàn),將來只需替換掉你的翻譯文件,就可為程序換掉顯示語言,使用中文顯示或者其他語言顯示等都很方便。
1. 程序中的準(zhǔn)備:
在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 產(chǎn)生一個(gè)新的po
mergetr xxx.po aa.po //合并到舊的po文件中
2)編輯po文件,其中charset需由iso-8859-1改為GB2312,然后將里面的待翻譯文字逐個(gè)翻譯。如“main button”翻譯成“主按鈕”
3)msg2qm –scope zh_CN.GB2312 xxx.po xxx.qm 轉(zhuǎn)為二進(jìn)制翻譯文件
3.程序中的使用
所有需要翻譯的文字在程序代碼中用tr包含起來,如:
QButtonGroup *buttongrp=new QButtonGroup(tr("main button"),this);
則程序運(yùn)行后,控件顯示時(shí)直接會(huì)顯示中文字體“主按鈕”
4.其他應(yīng)用
對(duì)于控件中動(dòng)態(tài)可變的文字的漢化,可采用數(shù)組方式,加入關(guān)鍵字QT_TRANSLATE_NOOP:
static const char* strings[] = {
QT_TRANSLATE_NOOP("MyWindow", "Hello" ), //前一個(gè)是類名,后一個(gè)是字符串
QT_TRANSLATE_NOOP( " MyWindow ","World" )
};
使用時(shí)如button->setText(tr(strings[0]));
即可從翻譯文件中取出Hello的中文翻譯“你好”,動(dòng)態(tài)的顯示在按鈕空間上。
三、直接在程序中寫入中文
程序中的準(zhǔn)備:
在main.cpp中加入如下代碼
app.setDefaultCodec(QTextCodec::codecForName("GBK"));設(shè)置字符編碼 font1("unifont",16,50,FALSE,QFont::Unicode); 建立字體
qApp->setFont(font1); 設(shè)置字體
程序中使用中文:
QButtonGroup *buttongrp=new QButtonGroup(tr("你好"),this);
則程序運(yùn)行后,控件顯示時(shí)直接會(huì)顯示中文字體“你好”
|