Название: [Решено] Не работает перевод до старта QApplication. Можно это как-то обойти? Отправлено: xintrea от Январь 20, 2020, 09:49 Перед тем, как будет стартовать объект QApplication (метод exec()), мне нужно подготовить определенные файлы, которые нужны для корректного старта, чтобы приложение могло их найти.
Подготовка файлов требует пользовательского выбора с вопросом "где разместить нужные файлы?". Соответственно нужно открыть окно, в котором будет интерфейс выбора. Окно такое есть, оно унаследовано от QDialog, оно работает даже до запуска основного приложения. Но вот проблема: в этом окне есть код автоматического определения языка системы. И он работает, и он определяет язык, и устанавливает его приложению, и этот код запускается самым первым в конструкторе окна: Код: // Автоматическое определение языка системы Все установки строк в классе этого окна происходят _после_ данного кода. Естественно, все строки обернуты в tr(), сделаны lupdate, linguist, lrelease. Однако перевода интерфейса не происходит. Я думал, что перевод не работает из-за того, что настройка языка делается в конструкторе окна. Однако, внутри класса окна есть вызов еще одного диалогового окна QMessageBox, создаваемом на месте вызова на стеке: Код: void InstallDialog::onAccepted() И в этом окне тоже перевод не работает. Я сейчас грешу только на то, что перевод не работает из-за того, что объект приложения создан, но его основной цикл не запущен. А применение перевода сделано где-то в глубинах запуска основного цикла. Вопрос в том, можно ли как-то выйти из этой проблемы, и заставить работать систему локализации Qt? Может быть, есть какой-то вызов, который обновит систему локализации без запуска основного цикла приложения? Или, может быть, есть какой-то другой метод? Очень не хотелось бы в корне переделывать все приложение из-за такой вот особенности Qt. Исходники: https://github.com/xintrea/mytetra_dev Места в исходниках: * /app/src/views/installDialog/InstallDialog.h * /app/src/views/installDialog/InstallDialog.cpp * /app/src/libraries/GlobalParameters.cpp, метод initWorkDirectory() * /app/src/main.cpp, функция main(), вызов globalParameters.init(); Примечание: Чтобы появилось проблемное окно, не должно существовать директории ~/.config/mytetra Название: Re: Не работает перевод интерфейса до старта QApplication. Можно это как-то обойти? Отправлено: kambala от Январь 20, 2020, 10:58 все просто: объект langTranslator находится на стеке и умирает после выхода из InstallDialog::setupAutoLangTranslation(), поэтому перевод не подгружается
Название: Re: Не работает перевод интерфейса до старта QApplication. Можно это как-то обойти? Отправлено: xintrea от Январь 20, 2020, 11:26 все просто: объект langTranslator находится на стеке и умирает после выхода из InstallDialog::setupAutoLangTranslation(), поэтому перевод не подгружается Точно, так и есть. |