Qt的TR似乎并没有对静态常量成员的工作?(Qt tr does not seem to work

2019-08-16 23:25发布

我工作的那一刻把我们的Qt GUI。

我有以下代码:

// header file
static const QString Foo;

// cpp file
const QString FooConstants::Foo = "foo"; 

// another cpp file
editMenu->addAction(tr(FooConstants::Foo));

这似乎并没有工作,虽然。

也就是说,有在的.ts文件中上述的等速没有条目。

如果我这样做,那么它的工作原理:

// another cpp file
editMenu->addAction(tr("foo"));

然而,这个常数在很多地方使用,我不想必须手动更新每个字符串文本。 (如果它要在将来改变)

任何人都可以帮忙吗?

Answer 1:

总结你的文字中QT_TR_NOOP宏:

// cpp file
const QString FooConstants::Foo = QT_TR_NOOP("foo");

从指南 :

如果您需要有翻译的文本完全不在一个功能,有两个宏的帮助:QT_TR_NOOP()和QT_TRANSLATE_NOOP()。 他们只是标志着由lupdate工具提取文本。 该宏扩展为只是文本(无背景)。



Answer 2:

正如托马斯提到的,你必须使用一个宏。

其原因是,Qt不知道默认翻译哪些字符串,它扫描的文件和寻找一组模式。 其中之一是tr("text")但如果你想用一个常数,你必须与明确的标记它QT_TRANSLATE_NOOPQT_TR_NOOP时,它的定义。



Answer 3:

editMenu->addAction(tr(FooConstants::Foo));

我觉得你的问题是,TR需要一个char *参数,而不是为QString:

QString QObject::tr ( const char * sourceText, const char * disambiguation = 0, int n = -1 )

你可以改变FooConstants类型::美孚,或将其转换为当您创建菜单操作,例如一个char *:

 const QByteArray byteArray = FooConstants::Foo.toLatin1();
 char *data = byteArray.data();
 editMenu->addAction(tr(data));


文章来源: Qt tr does not seem to work on static constant members?