Qt tr似乎不适用于静态常量成员?
问题描述:
我现在正在翻译我们的Qt gui。Qt tr似乎不适用于静态常量成员?
我有以下代码:
这似乎并没有工作,虽然。
也就是说,上述常量的.ts文件中没有条目。
如果我这样做,那么它的工作原理:
// another cpp file
editMenu->addAction(tr("foo"));
然而,这个常数在很多地方使用,我不想必须手动更新每个字符串文本。 (如果将来会改变)
任何人都可以帮忙吗?
答
editMenu->addAction(tr(FooConstants::Foo));
我觉得你的问题是,TR需要一个char *参数,而不是为QString:
QString QObject::tr (const char * sourceText, const char * disambiguation = 0, int n = -1)
你可以改变类型FooConstants :: Foo,或者在创建菜单操作时将其转换为char *,例如:
const QByteArray byteArray = FooConstants::Foo.toLatin1();
char *data = byteArray.data();
editMenu->addAction(tr(data));
答
正如托马斯提到的,你必须使用宏。
原因是Qt不知道默认翻译哪些字符串,它扫描文件并查找一组模式。其中之一是tr("text")
,但如果您想使用常数,则必须在定义时使用QT_TRANSLATE_NOOP
或QT_TR_NOOP
明确标记。
为什么不使用一个定义: #define Foo tr(“foo”) – 2009-09-28 11:11:51
@Patrice:因为它会导致比它的价值更多的麻烦。 – rpg 2009-09-28 12:11:35
我还没有用过tr,但为什么不这样做: const QString FooConstants :: Foo = QObject :: tr(“foo”); – Bill 2009-09-28 14:28:16