您的位置:首页 > 编程语言 > Qt开发

QT5入门之15 - qr函数

2015-10-27 12:31 513 查看
qr是一个函数,是用于实现国际化的。

setWindowTitle(tr("hello"));


如果你为这个程序提供了中文翻译包(其中hello被翻译成中文”你好”),那么标题将是中文”你好”;

如果你为程序提供且使用日文翻译包,那么text1的内容将是日文。

1.tr()函数是定义在QObject宏里面的,所有使用了Q_OBJECT宏的类都自动具有tr()的函数。

(只有加入了Q_OBJECT,你才能使用QT中的signal和slot机制。)

2.Q_OBJECT 宏展开后为生成 tr ,tr调用QCoreApplication的translate函数。而该函数需要指定编码。

QString QMetaObject::tr(const char *s, const char *c) const
{
return QCoreApplication::translate(d.stringdata, s, c, QCoreApplication::CodecForTr);
}


QString QCoreApplication::translate ( const char * context, const char * sourceText, const char * disambiguation, Encoding encoding, int n )

对tr和这个函数,manual中都有比较详尽的解释。我们这儿简单看一下它的这几个参数:

• context 上下文,一般就是需要翻译的字符串所在的类的名字

• sourceText 需要翻译的字符串。(我们关注的编码其实就是它的编码)

• disambiguation 消除歧义用的。(比如我们的类内出现两处”close”,一处含义是关闭,另一处含义是亲密的。显然需要让翻译人员知道这点区别)

• encoding 指定编码。它有两个值

o CodecForTr 使用setCodecForTr()设置的编码来解释 sourceText

o UnicodeUTF8 使用utf8编码来解释 sourceText

o 其实这两个分别对应tr和trUtf8

• n 处理单复数(对中文来说,不存在这个问题)

3.如何告诉tr 汉字在磁盘中保存的是何种编码?

QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));


4.

QString 采用的unicode,在中文支持上不存在任何问题

直接使用’&’来转义.&&

w.setWindowTitle(QObject::tr(“MyApp”));

有些东西了解就行了,太过深入需要很多时间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: