QT5入门之15 - qr函数

来源:互联网 发布:淘宝号登不上去 编辑:程序博客网 时间:2024/06/05 08:00

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”));

有些东西了解就行了,太过深入需要很多时间。

0 0