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

Qt国际化详细介绍

2016-03-09 16:41 393 查看

Qt 国际化

参与过qt项目,对qt国际化得了解并不深入,只知道使用tr即可达到翻译的效果,但不曾细究其中的用法。

这次在代码中看到了QT_TR_NOOP,于是搜索了下,特此将学习到的总结下:

用法

之前使用qt翻译用到tr,但是有些类并未继承自QObject,没有tr函数,在这种情况下如何使用呢?

今天,看到一个csdn的博客,写得很详细:参考如下:

/article/10120863.html

我自己也总结了下:

类继承自QObject:

直接使用tr:


QPushButton *button = new QPushButton(this);
button->setText(tr("国际化"));


类不继承自QObject:

使用QObject::tr:

QPushButton *button = new QPushButton(this);
button->setText(QObject::tr("国际化"));


在类声明中添加 Q_DECLARE_TR_FUNCTIONS,此类即可使用tr:

class MyClass
{
Q_DECLARE_TR_FUNCTIONS(MyClass)

public:
MyClass();
QString m_str;
...
};

MyClass::MyClass{
m_str = tr("国际化");
}


补充-tr内部包裹一个变量

一般tr均包裹一个常亮字符串,而如果我们tr内部包裹一个变量,如何通知程序进行翻译呢?

于是,这便用到了QT_TR_NOOP() 和 tr()

//.h file
class MyTranslation : QObject {
MyTranslation(QObject *parent = Q_NULLPTR);
}

//.cpp
MyTranslation(QObject *parent) : QObject(parent) {
QT_TR_NOOP("国际化");
···
}

QString myTr(const QString& str) {
static MyTranslation myTr;
return myTr.tr(str.toUtf8());
}

QString test = myTr("国际化");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: