#c #qt5 #locale #qwidget #qtranslator
Вопрос:
В моем приложении Qt5 я пытаюсь переключить язык во время выполнения. До сих пор здесь моя простая функция:
QTranslator _translator;
void MainWindow::switchLanguage(QString lang)
{
if (!_translator.isEmpty()) qApp->removeTranslator(amp;_translator);
if (lang == "it")
{
_translator.load("Language_it_IT.qm", qApp->applicationDirPath());
qApp->installTranslator(amp;_translator);
}
ui->retranslateUi(this);
}
Это работает нормально, но только для MainWindow
одного. Внутри у меня есть несколько классов форм (с их пользовательскими интерфейсами), которые я загружаю в 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(amp;_formMonitor);
ui->stackedWidget->addWidget(amp;_formSettings);
ui->stackedWidget->addWidget(amp;_formProgram);
// ...
}
void MainWindow::loadView(int index)
{
ui->stackedWidget->setCurrentIndex(index);
}
Эти формы не переводятся.
Как я могу перевести все «вложенные» формы внутри моей MainWindow
?
Ответ №1:
Переопределите changeEvent
классы форм следующим образом:
void Form::changeEvent(QEvent *e)
{
if (e->type() == QEvent::LanguageChange)
ui->retranslateUi(this);
QWidget::changeEvent(e);
}