2009-09-28 120 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明確標記。