2010-08-16 19 views
2

我在qt中有翻译问题。我的项目中的所有翻译都可以正常工作,但是其中一个翻译版本处于一个类的静态变量中。代码的相应部分如下所示qt tr()在静态变量中

头文件与此类似:

typedef struct { 
    int   type; 
    QString  problematicString; 
} info; 

MyClass::QObject_Descendant 
{ 
Q_OBJECT; 

//some functions like constructor, destructor... etc. 
.... 

static info myClassInfo;//class that makes problems 

} 

,并在实现文件我初始化变量,如下所示:

info MyClass::myClassInfo={ 
    1, 
    tr("something to be translated") 
}; 

而且无论我做什么(试图与QT_TR_NOOP,然后tr()等)我无法获得myClassInfo.problematicString翻译。最奇怪的是文本“要翻译的东西” 出现在* .ts文件中。

如果有人有任何提示,请与我分享。提前致谢。

Chris。

+0

相似的问题在这里:http://stackoverflow.com/questions/1486492/qt-tr-does-not-seem-to-work-on-static-constant-members – sje397 2010-08-16 13:42:33

回答

3

在运行int main函数之前,实例化静态变量(因此构造函数代码将运行)。翻译代码在QApplication的构造函数中设置(我相信),直到您输入int main函数才会运行。因此,您正试图在代码支持它的代码被初始化之前获得一个字符串的翻译。

为了避免这种情况,您可以接受给定的字符串未被翻译,并在每次使用时明确地翻译它,或者使用Construct on First Use idiom而不是静态成员变量。

+0

非常感谢你,我欣赏链接以适当的参考。 是的,我必须改变我的来源。 一切顺利, 克里斯。 – Krzysztow 2010-08-17 09:11:23

+0

到C++ FAQ的链接已经过时。我搜索了文章并更改了链接。 – 2013-08-28 13:15:59