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