如何重新翻译动态创建的小部件?

时间:2014-12-24 10:02:44

标签: qt qtranslate qtwidgets

我想在动态中重新加载QTranslator,然后使用"静态附加标签"重新翻译动态创建的小部件。

e.g。我有静态标签:

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::中,并且根据我的理解不会自动翻译。如何通过动态加载另一个翻译器来翻译动态部分?

1 个答案:

答案 0 :(得分:2)

在包含按钮的类中,您应该覆盖changeEvent并在其中捕获QEvent :: LanguageChange。在那里你可以a)调用retranslateUi动态重新翻译.ui文件(你已经完成)的文本,b)也重新翻译所有手动创建的字符串(例如使用button1-> setText(tr(“Import”))。 如果你看一下retranslateUi函数,你会发现自动生成的ui文件也只是为设计器中的每个文本集再次包含对QApplication :: translate的调用。对于.ui文件之外定义的字符串,这显然不能自动完成,因此您总是需要手动执行此操作。