首页| 论坛| 消息

标题:请教使用setFont,setText显示中文和使用QTranslator显示中文原理上的不同
作者:forder
日期:2007-12-07 21:19
内容:

刚刚接触QT,概念上有些不清,可能不是个好问题。
使用qt/E-3.3.4 fedora 5。
在中文化的过程中,首先尝试使用QTranslator,在designer里添加控件text选择unifont或者自己添加上的stxihei,code选择unicode。使用lupdate生成翻译文件,使用zhcon(中文控制台)编辑翻译文件为中文,使用lrelease生成.qm文件。
main文件里添加QTranslator相关内容。编译通过后运行### -qws,中文显示为方框。后运行其example文件夹中"i18n -qws zh"同样为方框。怀疑是否自己编译qte过程中没有添加中文支持。
之后,使用下面方法:
在程序设计中,首先指定编码方式以支持中文:
QTextCodec *code=QTextCodec::codecForName("GBK")
  接着为部件(例如Mywidget)执行 Unicode的转化编码:
QString uniStr=code -> toUnicode("要显示的中文字符")
Mywidget-> setFont(QFont("stxihei",20,QFont::Bold))
Mywidget-> setText(uniStr)
则可以在"### -qws""中显示中文。
自己更偏向于使用方法一,所以希望大侠们援手相助,先谢过。
疑问,方法2的中文显示是否和qte的中文支持无关。
另:方法2只是在编码过程使用的Unicode的转化编码,和应用程序指定的编码方式无关(是不是?)
在工程文件里的CODEC是否用来指定应用程序编译时候的编码。
包括QTextCodec::setCodecForTr()的作用。
版大不吝赐教!!!


#1 [forder 12-12 09:12]
问题同上,另附加问题,是否使用示例程序"./i18n -qws -font unifont"可以显示中文就表示编译的QTE可以支持中文了。多谢各位大虾指点
#2 [shiroki 12-12 11:31]
前面的显示成方块,一般是字体的问题。
至于你问的translator和setText用的翻译原理,实际上是一样的。 setText底层调用了tr, 再底层调用了QApplication::translate, 都是用qm文件来做翻译的
中文显示涉及两个方面, 一是编码,二是字体。 unicode默认就支持,所以unicode编码的中文, 只要字体包含中文字符就可以显示; 但是不表示gb编码已经包含在qt库里了。
#3 [forder 12-12 14:53]
多谢shiroki。之前查了一下资料,总有语焉不详的感觉,亦或是自己概念不清楚。
按照shiroki的意思,qte即使不在编译的过程中指定
#ifndef QT_NO_CODECS
#define QT_NO_CODECS
#endif
仍然是可以使用translate来支持中文的。
不知道我的理解是否正确。
另附上一个简单的中文化程序,在我这里编译一直显示乱码(指定字体unifont),希望大家能帮我找出问题所在
翻译文件tt1_CN.qm
main.cpp:
#include
#include
#include
#include
#include
#include
int main( int argc, char **argv )
{
QApplication app( argc, argv );
static QTranslator *translator = 0;
QFileInfo fi("tt1_CN.qm");
if ( !fi.exists() ){
QMessageBox::warning(0,"File error",
QString("Cannot find translation for language zh"));
return 0;
}
translator = new QTranslator(0);
translator->load(QString("tt1_CN.qm"), "." );
app.installTranslator( translator );
QPushButton hello( QPushButton::tr("Hello world!"), 0 );//要翻译的文字一定要用 tr("")
app.setMainWidget( &hello );
hello.show();
return app.exec();
}
#4 [forder 12-13 21:38]
据自己理解中文化的过程无非就是首先设定窗口的显示使用unicode方式编码,然后就是载入翻译文件。就应该可以显示中文了。
就代码看,在designer中可以设置窗口字体以及编码方式,是否在程序中这步就可以掠过,翻译文件的载入就是按照上帖中的代码完成的,但一直显示为乱码。
恳请各位提醒中间的错误。
#5 [shiroki 12-14 15:19]
翻译文件里的内容如果用linguist来编辑的话,应该默认就存成unicode, 这样是不用经过编码转换就可以显示的。所以注意一下是不是用的中文字体就行了
如果是手动编辑器来编辑,有可能存的文件编码不是unicode, 这样要显示就涉及到编码转换的问题。。这个就比较麻烦了。不知道你这个是什么情况。

<< 1 2 >> (1/2)

回复 发表
主题 版块