繁体   English   中英

Qt转换器在Lambda插槽中不起作用

[英]Qt Translator doesn't work in Lambda Slot

我试图说服我的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";
}

我得到“ Base Translator loading”输出。 有人知道,翻译可能会引起混乱吗?

QTranslator对象需要在QApplication的整个生命周期中存在。 在上面的示例中,在QAppDeriv的构造函数中将转换程序生成为局部变量会很好,但在构造之后不会如此。 正确的方法是在堆上创建QTranslator

QAppDeriv::QAppDeriv(int &argc, char **argv, int flags)
    : QApplication(argc, argv, flags)

{
    // set default local
    QLocale::setDefault(QLocale(QLocale::German, QLocale::Germany));

    // create translator objects on heap
    QTranslator *qtTranslator = new QTranslator();
    if (qtTranslator->load(QLocale::German, "qt", "_", ""))
    {
        installTranslator(qtTranslator);
    }

    QTranslator *qtBaseTranslator = new QTranslator();
    if (qtBaseTranslator->load(QLocale::German, "qtbase", "_", ""))
    {
        installTranslator(qtBaseTranslator);
    }

    // create the main window
    window  = std::make_shared<RTWindow>();
    window->show();

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM