定义
tr()方法是Qt中QObject的一个static public成员方法,其完整的定义及说明如图-1所示。
图-1
由于是public的,所以Qt下的所有类中都会从QObject继承到一个tr()方法。
作用
翻译Qt文档中的描述:
返回一个转换过了的sourceText的版本,可选的选项有一个disambiguation字符串和参数n的值;否则,如果没有合适的转化后的字符串可用,就返回sourceText它自己。
举例
貌似tr()这个方法与编码,中文显示什么的有关,先看一个例子
#include <QtGui/QApplication>
#include <QtGui/QPushButton>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QPushButton p("你好");
p.setVisible(true);
return a.exec();
}
效果如图-2所示:
图-2
由此可以看出,如果对中文字符串没有用tr()处理,则不能正常显示。
加上tr()之后呢?
#include <QtGui/QApplication>
#include <QtGui/QPushButton>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QPushButton p(QPushButton::tr("你好"));
p.setVisible(true);
return a.exec();
}
效果如图-3所示:
图-3
好像也没有正常显示啊。
一篇精彩的博文:[转自:http://blog.csdn.net/mfc11/article/details/6591134]
在论坛中漂,经常遇到有人遇到tr相关的问题。用tr的有两类人:
- (1)因为发现中文老出问题,然后搜索,发现很多人用tr,于是他也开始用tr
- (2)另一类人,确实是出于国际化的需要,将需要在界面上显示的文件都用tr包起来,这有分两种:
- (2a) 用tr包住英文(最最推荐的用法,源码英文,然后提供英文到其他语言的翻译包)
- (2b) 用tr包住中文(源码用中文,然后提供中文到其他语言的翻译包)
注意哦,如果你正在用tr包裹中文字符,却不属于(2b),那么,这是个信号:
- 你在误用tr
- 你需要的是QString,而不是tr
如果你确实属于(2b),请做好心理准备,你可能还会遇到很多困难,请考虑Qt国际化(源码含中文时)的点滴分析