我工作的那一刻把我们的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"));
然而,这个常数在很多地方使用,我不想必须手动更新每个字符串文本。 (如果它要在将来改变)
任何人都可以帮忙吗?
总结你的文字中QT_TR_NOOP
宏:
// cpp file
const QString FooConstants::Foo = QT_TR_NOOP("foo");
从指南 :
如果您需要有翻译的文本完全不在一个功能,有两个宏的帮助:QT_TR_NOOP()和QT_TRANSLATE_NOOP()。 他们只是标志着由lupdate工具提取文本。 该宏扩展为只是文本(无背景)。
正如托马斯提到的,你必须使用一个宏。
其原因是,Qt不知道默认翻译哪些字符串,它扫描的文件和寻找一组模式。 其中之一是tr("text")
但如果你想用一个常数,你必须与明确的标记它QT_TRANSLATE_NOOP
或QT_TR_NOOP
时,它的定义。
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));