1

我想QTranslator动态重新加载,然后重新翻译动态创建的带有“静态附加标签”的小部件。

例如,我有类似的静态标签:

QString AutoplanWorkspace::IMPORT = QPushButton::tr("Import");

然后我用这个标签创建动态控制:

QPushButton *button1 = new QPushButton(IMPORT)

我也像这样加载新的翻译器:

  if (myTranslator.load("C:\\tr.qm")) {
    //myTranslator.setParent(parent);
    qApp->installTranslator(&myTranslator);
  }

据我了解,我还需要重新加载 UI:

controls.retranslateUi(this);

但是据我所知,动态部分和静态属性也不在Ui::并且不会自动翻译。如何通过动态加载另一个翻译器来翻译动态部分?

4

1 回答 1

2

在包含按钮的类中,您应该覆盖changeEvent并在其中捕获 QEvent::LanguageChange。在那里,您可以 a) 调用 retranslateUi 以动态重新翻译 .ui 文件中的文本(您已经完成)和 b) 还可以重新翻译所有手动创建的字符串(例如,使用 button1->setText(tr("Import"))。如果你看一下 retranslateUi 函数,你会看到自动生成的 ui 文件也简单地包含对设计器中每个文本集的 QApplication::translate 的调用。显然,对于在.ui 文件,因此您始终需要手动执行此操作。

于 2014-12-24T11:18:20.917 回答