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