Qt Translator не работает в лямбда-слоте

Я пытаюсь убедить мое приложение Qt перевести кнопки в пустое диалоговое окно. По неизвестной причине первый диалог переводится на немецкий, но диалог, выполненный в лямбда-слоте, не переводится. Я уже пытался использовать более старый синтаксис сигнала, чтобы увидеть, было ли лямбда-выражение проблемой, но это не изменило результат.
После того, как конструктор 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";
}

Я получаю вывод «Базовый переводчик загружен». Кто-нибудь знает, что может помешать переводу?

0

Решение

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();

}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]