关于QT的编码格式

这篇博客详细介绍了如何使QT工程支持多语言,包括修改工程设置、使用lupdate和linguist工具处理翻译文件,以及在程序中加载和使用翻译文件。重点讨论了Qt的tr()函数在字符串翻译中的作用,lupdate更新翻译文件,以及linguist进行文本翻译的步骤,最终通过lrelease生成QM文件实现发布的国际化。
摘要由CSDN通过智能技术生成

QT默认是只支持英文,不支持中文字符的,网上好多人说用 .


QTextCodec *codec = QTextCodec::codecForName("GB2312");

QTextCodec::setCodecForLocale(codec);


可以解决,试了发现不管用,其实,这是QT4.0之前的方法。


现在要用下面这种方法设置。

#if defined(_MSC_VER) && (_MSC_VER >= 1600)  
# pragma execution_character_set("utf-8")  
#endif 


但是不推荐用更改字符集的方法来修改,建议用多语言字符集的方法设置:



使用VS集成开发工具新建一个QT工程后,需要为其创建一系列国际化ts文件(产品支持几种语言创建几个),如下图所示。

创建后默认名称为 工程名称_语言.ts,如下图所示。

然后把生成的ts文件移动到 src\Translator 目录下对应的语言目录中,如下图所示,然后重新添加到工程中。

最后设置QT工程属性中 lupdateOnBuild = True,如下图所示。

 

3.2        修改工程

以对已有工程的维护工程中,如果对现有工程进行了修改,并想查看修改后的国际化效果,需要在编译完工程后手动执行相应语言的lrelease命令,如下图所示。

这时会在相应的ts目录中生成相应的qm文件,手动把生成的qm文件替换发布目录中的qm文件即可。

 

3.3        翻译工程

在进行工程发布之前,需要进行人工翻译工作,把ts文件中的原始语言翻译成目标语言,由于我们使用的原始语言为英文,所以需要把其翻译成中文。翻译使用的工具可以使用QT语言家或其他的文本工具,如下所示。

 

3.4        发布工程

在工程翻译完成后,可以执行预先执行的批处理文件,来批量生成qm文件到发布目录中。

 

4        Qt国际化技术介绍

qt国际化其实就是qt中字符串的字符集编码的设置。当然这个设置不是简单的选择一下什么语言就好,这个需要编程人员来处理的。

通常对于非拉丁字符(主要指latin1字符集)的字符串,就需要使用到unicode字符集,而通常使用UTF-8编码。如果只是本地使用一下,直接使用""包含文件就可以了。但是有时候设计到网络传输等情况,就要考虑这些了。

QT提供了QTextCodec类来进行文本字符集的转换操作。
本文的重点不在于此。深入学习可以看

·        QTextCodec && 字符编码

·        Qt 编码问题QTextCodec

本文的重点在于QT界面显示的中文化。

4.1        控制需要翻译的文本

在编写QT程序的时候,对于要翻译的文本,应当使用tr()包含起来。
我们先来看看tr函数的原型,注意,这是一个静态函数。

QString QObject::tr(constchar * sourceText, constchar * disambiguation = 0, int n = -1)

因为Qt中的类都继承自QObject类,所以这里直接使用了tr,如果不是在继承自QT的类中使用,应该用Object::tr(...)来调用。

这还不是很准确,在宏定义Q_OBJECT展开后,会创建一个QMetaObject对象,即static const QMetaObject staticMetaObject;这个可以看看

#define Q_OBJECT \

 public: \

 Q_OBJECT_CHECK \

 static const QMetaObject staticMetaObject;\

 Q_OBJECT_GETSTATICMETAOBJECT \

 virtual const QMetaObject *metaObject() const;\

 virtual void *qt_metacast(const char *); \

 QT_TR_FUNCTIONS \

 virtual int qt_metacall(QMetaObject::Call,int,void **); \

 private:

展开一个宏定义QT_TR_FUNCTIONS,而这里面定义了一个内联的tr函数。可以看出这里实际是使用了一个静态对象staticMetaObject的成员函数tr。

# defineQT_TR_FUNCTIONS \

 static inline QString tr(const char *s, constchar *c = 0) \

 { return staticMetaObject.tr(s, c); } \

 static inline QString trUtf8(const char*s,const char *c = 0) \

 { return staticMetaObjec

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值