qt中translate、tr关系与中文问题

qt中translate、tr关系与中文问题

ID:8892334

大小:31.00 KB

页数:4页

时间:2018-04-10

qt中translate、tr关系与中文问题_第1页
qt中translate、tr关系与中文问题_第2页
qt中translate、tr关系与中文问题_第3页
qt中translate、tr关系与中文问题_第4页
资源描述:

《qt中translate、tr关系与中文问题》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Qt中translate、tr关系与中文问题题外话:何时使用tr?在论坛中,经常遇到有人遇到tr相关的问题。用tr的有两类人:(1)因为发现中文老出问题,然后搜索,发现很多人用tr,于是他也开始用tr(2)另一类人,确实是出于国际化的需要,将需要在界面上显示的文件都用tr包起来,这有分两种:(2a)用tr包住英文(最最推荐的用法,源码英文,然后提供英文到其他语言的翻译包)(2b)用tr包住中文(源码用中文,然后提供中文到其他语言的翻译包)注意哦,如果你正在用tr包裹中文字符,却不属于(2b),那么,这是个信号:你在误用t

2、r你需要的是QString,而不是tr如果你确实属于(2b),请做好心理准备,你可能还会遇到很多困难,请考虑Qt国际化(源码含中文时)的点滴分析tr是做什么的?下面二者的区别是什么?QStringtext1=QObject::tr("hello");QStringtext2=QString("hello");tr是用来实现国际化,如果你为这个程序提供了中文翻译包(其中hello被翻译成中文"你好"),那么text1的内容将是中文"你好";如果你为程序提供且使用日文翻译包,那么text1的内容将是日文。tr是经过多级函数调

3、用才实现了翻译操作,是有代价的,所以不该用的时候最好不要用。关注的对象本文关注的是tr或translate中包含中文字符串的情况:QObject::tr()QCoreApplication::translate()QTextCodec::setCodecForTr这个问题本多少可说的。因为涉及到的编码问题和QString与中文问题中是完全一样的,只不过一个是用的setCodecForCStrings一个用的是setCodecForTr。简单回顾QString的中文问题QString采用的unicode,在中文支持上不存在

4、任何问题"我是中文" 这是传统的 const char * 的窄字符串当将窄字符串赋值到QString时,我们需要告诉它我们的窄串采用的何种编码(gbk?、utf-8?)究竟何种编码主要取决于我们的源代码文件的编码(windows上一般是gbk,其他平台一般utf-8)例子:QStrings1="我是中文";QStrings2("我是中文");QStrings3;s3="我是中文"s1、s2用的是QString的构造函数QString ( const char * str )s3用的是QString的赋值操作符 QStr

5、ing & operator= ( const char * str)如果不指定编码,s1,s2,s3将全部都是(国内大多数人所称的)乱码。因为QString将这些const char *按照latin1来解释的,而不是用户期待的gbk或utf8。QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"))这两条语句

6、中的一条可以解决问题,至于如何选择,此处不再重复。QObject::tr说实话,在tr中使用中文不是个好主意。不过既然总有人用(无论是(1)还是(2b)),而且总有人遇到问题,所以还是简单整理一下吧。相比QCoreApplication::translate,大家用tr应该用的很多了,尽管不少人不清楚tr究竟是做什么的。tr("我是中文");这调用的是下面这个函数(至少我们可这么认为是)。QStringQObject::tr(constchar*sourceText,constchar*disambiguation=0,

7、intn=-1)与QString("我是中文")完全一样,你必须告诉tr这个窄字符串是何种编码?你不告诉它,它就用latin1。于是所谓的乱码问题就出来了。如何告诉tr你写的这几个汉字在磁盘中保存的是何种编码呢?这正是QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312")); QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));所做的。这两个选择的原则,由于和前文完全一样,此处也不再重复

8、。如果你的编码采用的utf8,可以直接使用trUtf8而不必设置setCodecForTr。如果你只关心乱码问题,到此为止就可以了(下面不再关注编码)。如果想对tr进一步了解,不妨。。继续。。QCoreApplication::translate我们知道tr是用于实现程序的国际化(或者说多语言翻译),看Qt相关资料的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。