【问题标题】:qt tr() in static variable静态变量中的 qt tr()
【发布时间】:2011-03-30 10:37:42
【问题描述】:

我对 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。最奇怪的是文字“something to be translate” 出现在 *.ts 文件中。

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

克里斯。

【问题讨论】:

标签: qt variables static translate


【解决方案1】:

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

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

【讨论】:

  • 非常感谢,感谢您提供相应参考的链接。是的,我必须改变我的来源。一切顺利,克里斯。
  • C++ 常见问题解答的链接已过时。我搜索了这篇文章并更改了链接。
猜你喜欢
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-14
  • 2012-07-22
  • 2011-05-30
  • 1970-01-01
相关资源
最近更新 更多