qt tr()在静态变量中

时间:2010-08-16 13:26:13

标签: qt variables static translate

我有关于qt翻译的问题。我的项目中的所有翻译工作正常,但是一个,它是一个类的静态变量。相应的代码部分如下所示

头文件类似于:

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文件中。

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

克里斯。

1 个答案:

答案 0 :(得分:3)

在运行int main函数之前,实例化静态变量(因此运行构造函数代码)。翻译代码在QApplication构造函数中设置(我相信),在您输入int main函数之前,该代码不会运行。因此,您试图在支持它的代码初始化之前获取字符串的转换。

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