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



我想在动态中重新加载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 文件外部定义的字符串,这显然不能自动完成,因此您始终需要手动执行此操作。

相关内容

  • 没有找到相关文章

最新更新