Qt5 dynamici c проблемы перевода для определенных C ++ свойств - PullRequest
0 голосов
/ 26 марта 2020

В настоящее время я работаю над другим кодом, и мне нужно исправить ошибку, связанную с динамическим переводом c.

Когда язык изменяется, загрузчик перезагружается, он работает, но генерирует нежелательные эффекты (включая упомянутую выше ошибку).

Поэтому я попытался найти способ динамического изменения перевода без перезагрузки всего.

Я добавил m_engine->retranslate() в своей функции switchLanguage, и это работает отлично, но только для текстов, определенных непосредственно в файлах QML. Дело в том, что в классе основных контроллеров C ++ также есть много текста, определенного с помощью setContextProperty, и для них он вообще не работает (что кажется вполне нормальным, поскольку m_engine является QQmlApplicationEngine).

Я не понимаю, как я могу просто заставить эти тексты переводить тоже. У меня они есть почти в каждой функции контроллера, и они используются различными файлами QML. Я боюсь, что не будет другого выбора, кроме как полностью изменить способ управления переводом. Я надеюсь, что опытные программисты могут помочь мне с этим.

Другая информация:

  • Я работаю с версией 5.13.0 Qt.

  • Я не использую Designer и не могу использовать ui.retranslateUi().

1 Ответ

1 голос
/ 26 марта 2020

Трудно сказать, как выглядит класс вашего основного контроллера, поэтому вот краткий общий ответ.

Вы можете установить eventFilter и прослушать LanguageChange.

In конструктор «класса основного контроллера», добавьте:

auto *core = QCoreApplication::instance();
if(core != nullptr)
{
    core->installEventFilter(this);
}

Затем добавьте функцию в свой класс:

bool MainControllerClass::eventFilter(QObject *watched, QEvent *event)
{
    Q_UNUSED(watched);
    if(event->type() == QEvent::LanguageChange)
    {
         //set properties again or emit property changed signals
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...