c++ - 如何在 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
?
解决方案
像这样重新实现changeEvent
表单类:
void Form::changeEvent(QEvent *e)
{
if (e->type() == QEvent::LanguageChange)
ui->retranslateUi(this);
QWidget::changeEvent(e);
}
推荐阅读
- php - 查询 CodeIgniter NOW() Sysdate() 或 .?
- gitlab - Expo发布命令在隧道连接阶段后卡住
- r - r plm 时间和个体固定效应 - “双向”与因子(索引)时间
- rxjs - Observable - 获取最新排放的值
- mysql - WERE IN(使用 RETURNING 子查询删除)
- vba - 使用 VBA 从 csv 文件中删除坏记录的最佳方法
- php - 如何将我的实体字段设置为“nullable=false”?
- bash - 在 Bash 脚本中,如何解释 (*)?
- javascript - React无法读取未定义的属性'setState'
- linux - perf 在 Linux 中运行进程