我在我的项目中集成了
根据我的研究,必须这样重新实现
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 Designer编写的应用程序,似乎可以直接调用
ui->retranslateUi(this);
在changeEvent()
函数内所有文本字段都将被翻译。
但对于应用程序中的所有其他文本,文本必须设置为上面的示例。这让我感到痛苦,因为当我更改某些内容时,我总是需要在两个地方更新文本(在changeEvent
函数和程序的主要部分)。
对于很多文本字段来说,很容易遗漏一些。
有没有一种方法可以更新这些文本字段,而不需要复制“文本设置方法”?
widget->setText(tr("WidgetText", "WidgetContext"));
调用。 - Caleth