【发布时间】:2017-03-14 13:56:14
【问题描述】:
我在我的项目中集成了QTranslator 类。到目前为止,一切正常,并且在程序重新启动时,所有文本字段都已翻译。现在我想提供动态翻译,所以用户不需要重新启动应用程序。
我在研究中发现,有必要像这样重新实现 changeEvent() 函数:
void MyWidget::changeEvent(QEvent *event)
{
if (event->type() == QEvent::LanguageChange) {
titleLabel->setText(tr("Document Title"));
...
okPushButton->setText(tr("&OK"));
} else
QWidget::changeEvent(event);
}
(来源:http://doc.qt.io/qt-5/internationalization.html#dynamic-translation)
对于使用 Qt 设计器编写的应用程序,似乎可以调用
ui->retranslateUi(this);
在changeEvent() 函数中,所有文本字段都将被翻译。
但是对于应用程序中的所有其他文本,必须按照上面的示例设置文本。我觉得很痛苦,因为当我更改某些内容时(在changeEvent 函数和程序的主要部分中),我总是需要在两个地方更新文本。
有很多文本字段,很容易漏掉一些东西。
有没有一种方法可以更新这些文本字段而无需复制“文本设置方法”?
【问题讨论】:
-
在我的项目中,我只是在需要翻译方法的类中创建,例如 retranslate();当需要重新翻译时会调用它。基本上是在父类上调用 retranslate,然后他又在子类上调用 retranslate 方法
-
在这些 retranslate() 方法中会发生什么?
-
@J.A.Norton 这些是由 Qt MOC 工具生成的方法。它们相当于一长串
widget->setText(tr("WidgetText", "WidgetContext"));电话
标签: c++ qt qtranslate