首页 > 解决方案 > 如何在 QMainWindow 中的所有 ui 上递归使用 retranslateUi()?

问题描述

在我的 Qt5 应用程序中,我试图在运行时切换语言。到目前为止,我的简单功能是:

QTranslator _translator;

void MainWindow::switchLanguage(QString lang)
{
    if (!_translator.isEmpty()) qApp->removeTranslator(&_translator);
    if (lang == "it")
    {
        _translator.load("Language_it_IT.qm", qApp->applicationDirPath());
        qApp->installTranslator(&_translator);
    }
    ui->retranslateUi(this);
}

它工作正常,但仅此MainWindow而已。在里面,我有一些表单类(带有它们的 UI),我将它们加载到QStackedWidget

FormMonitor _formMonitor;    // they all inherit from QWidget
FormSettings _formSettings;  // and have their .ui file
FormProgram _formProgram;

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
    // ...
    ui->stackedWidget->addWidget(&_formMonitor);
    ui->stackedWidget->addWidget(&_formSettings);
    ui->stackedWidget->addWidget(&_formProgram);


    // ...
}

void MainWindow::loadView(int index)
{
    ui->stackedWidget->setCurrentIndex(index);
}

这些表格没有翻译。

如何翻译我的所有“嵌套”表格MainWindow

标签: c++qt5localeqwidgetqtranslator

解决方案


像这样重新实现changeEvent表单类:

void Form::changeEvent(QEvent *e)
{
    if (e->type() == QEvent::LanguageChange)
        ui->retranslateUi(this);

    QWidget::changeEvent(e);
}

推荐阅读