2009-09-28 114 views
3

我现在正在翻译我们的Qt gui。Qt tr似乎不适用于静态常量成员?

我有以下代码:

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

也就是说,上述常量的.ts文件中没有条目。

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

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

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

任何人都可以帮忙吗?

+0

为什么不使用一个定义: #define Foo tr(“foo”) – 2009-09-28 11:11:51

+0

@Patrice:因为它会导致比它的价值更多的麻烦。 – rpg 2009-09-28 12:11:35

+0

我还没有用过tr,但为什么不这样做: const QString FooConstants :: Foo = QObject :: tr(“foo”); – Bill 2009-09-28 14:28:16

回答

8

环绕你的文字中QT_TR_NOOP宏:

// cpp file 
const QString FooConstants::Foo = QT_TR_NOOP("foo"); 
0
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)); 
2

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

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