问:我无法在QApplication的子类中安装翻译器

时间:2010-12-17 06:21:35

标签: c++ qt localization translation

在我的应用程序中,我将QApplication子类化为很多事情,例如集中式异常处理,SQLite数据库连接,通过QSettings初始化默认设置(需要时)。特别是加载翻译。我在构造函数中执行它,当我这样做时:

installTranslator (&translator);
qDebug() << "Translation from PApplication:"
         << translate ("PAddFormWindow", "Dialog");

我得到了非常正确的翻译(俄语)。但在我的应用程序中,我看到一切都用英语。更糟糕的是,即使我在初始化应用程序对象后尝试立即翻译,我也会用英语看到它:

PApplication a ("PCorrect", argc, argv);
qDebug() << "Translation from void main():"
         << a.translate ("PAddFormWindow", "Dialog");

那么,为什么它不起作用?是因为我在构造函数中这样做了吗?我还应该提到PApplication类是在应用程序本身中声明和定义的,而是在动态加载的库中(我正在开发一个应用程序套件)。我的平台是带有Qt 4.7.0的Windows XP。

1 个答案:

答案 0 :(得分:4)

&translator中的installTranslator(&translator)可能是指从构造函数退出时被销毁的局部变量。如果installTranslator()没有复制它(文档在这个主题上不是很清楚),可能会发生任何事情,包括非工作翻译甚至是段错误。

事实上,docs给我们提示:“安装或删除QTranslator,或更改已安装的QTranslator 会生成一个LanguageChange事件”。事实上,我们可以改变翻译,它会影响某些事情,这表明它不会被复制。但目前还不清楚。它应该明确说明它是否被复制以及我们应该如何处理它。