Название: Динамическое изменение перевода Отправлено: Sergey от Май 28, 2013, 11:45 Здравствуйте ! Сделал перевод как и описывалось в доке, все нормально. Проблема с динамическим переводом. Прочитал и Шлее и Бланшет по поводу перевода . По форуму рыскал нашел варианты-попробовал все равно не получается . Не совсем понимаю в какой момент времени указывать функцию retranslateUI ? попробовал сделать в виде меню просто соединил сигналом и слотом , что когда нажимаю на кнопку загружается русский , но такой вариант не прокатил. Подскажите пожалуйста !
Заранее благодарен ! Название: Re: Динамическое изменение перевода Отправлено: Serr500 от Май 28, 2013, 11:57 см. QCoreApplication::installTranslator. retranslateUi вызовется автоматически.
Название: Re: Динамическое изменение перевода Отправлено: Sergey от Май 28, 2013, 13:10 Я его и использовал , ну давайте разберем напримере. Вот код одного из моих файлов , я хочу перевести ну например слово Language или Settings. В Qt Linguist все сохранил и скомпилил , в чем моя ошибка ?
Код: #include <QtGui> Название: Re: Динамическое изменение перевода Отправлено: Serr500 от Май 29, 2013, 12:11 Ошибка тривиальная для новичков. И если посмотреть на код повнимательнее, то она становится очевидной. Смотрите.
В методе Handle::changeLanguage создаётся объект translator. Затем в него грузится файл (кстати, надо проверять успешность, не зря же метод что-то возвращает). Далее транслятор инсталлируется. А что происходит в следующей строчке, где находится закрывающая фигурная скобка метода? Многие думают, что ничего. Но это не так! И если зайти в дизассемблированный код, то мы увидим, что там происходит очень много интересного! Например, разрушаются локальные переменные... Опа! Вот где ошибка! При выходе из метода объект translator благополучно похеривается! И при этом (он же потомок QObject) шлёт в QCoreApplication сигнал destroyed. Что же делает QCoreApplication? Правильно, убирает ссылку на транслятор. То есть транслятора у нас снова нет! Выход? "Элементарно, Ватсон!" (C) Шерлок Холмс. Код: static QTranslator translator; Название: Re: Динамическое изменение перевода Отправлено: vbv от Декабрь 24, 2013, 04:32 QTranslator *translator=new QTranslator;
translator->load().... qApp->installTranslator(translator); Название: Re: Динамическое изменение перевода Отправлено: kambala от Декабрь 24, 2013, 12:52 так будет утечка памяти при повторных вызовах смены языка
Название: Re: Динамическое изменение перевода Отправлено: kefir500 от Январь 24, 2014, 12:41 retranslateUi() работает только для виджетов созданных в Qt Designer.
В Вашем случае нужно создать отдельный метод, выставляющий текст у виджетов: Код: void Handle::retranslate() |