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

Sep*_*ram 2 c++ qt translation localization

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

installTranslator (&translator);
qDebug() << "Translation from PApplication:"
         << translate ("PAddFormWindow", "Dialog");
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ser*_*nov 5

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

事实上,文档给了我们一个提示:“安装或删除 QTranslator,或更改已安装的 QTranslator 会生成 LanguageChange 事件”。我们可以更改翻译器并且它会影响某些内容的事实表明它没有被复制。但它仍然很不清楚。它应该明确说明它是否被复制以及我们应该如何处理它。