我试图说服我的 Qt 应用程序翻译虚拟对话框中的按钮。由于未知原因,第一个对话框翻译为德语,但在 lambda 槽中执行的对话框没有翻译。我已经尝试使用较旧的信号语法来查看 lambda 表达式是否是问题所在,但它并没有改变结果。RTWindow 构造函数完成后,应用程序构造函数完成并main()
调用app.exec()
. 我无法控制任何可能取代翻译器的代码。
在此代码中,通过单击菜单项调用的回调会创建未翻译的对话框。在构造函数中创建的对话框被翻译。
我没看到
RTWindow::RTWindow(QWidget *parent) : QMainWindow(parent)
{
ui.setupUi(this);
this->setWindowTitle("RodeTracker 2");
auto fileMenu = new QMenu("Datei");
auto configMenu = new QMenu("Bearbeiten");
auto clientAction = new QAction("Kunden ...");
configMenu->addAction(clientAction);
ui.menuBar->addMenu(fileMenu);
ui.menuBar->addMenu(configMenu);
// translates fine:
QMessageBox msgBox;
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Cancel);
msgBox.exec();
connect(clientAction, &QAction::triggered, [=]()
{
// doesn't translate:
QMessageBox msgBox;
msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Cancel);
msgBox.exec();
});
}
翻译与这些行一起安装:(QApplication 派生构造函数)
QLocale::setDefault(QLocale(QLocale::German, QLocale::Germany));
QTranslator qtBaseTranslator;
if (qtBaseTranslator.load(QLocale::German, "qtbase", "_", ""))
{
installTranslator(&qtBaseTranslator);
qDebug() << "Base Translator loaded";
}
我得到“加载了基本翻译器”的输出。有谁知道,翻译有什么问题吗?