Qt: мне не удается установить переводчик в подклассе QApplication - PullRequest
2 голосов
/ 17 декабря 2010

В моем приложении я делаю QApplication на подклассы для многих вещей, таких как централизованная обработка исключений, соединение с базой данных SQLite, инициализация настроек по умолчанию (при необходимости) с помощью QSettings. И, в частности, загрузка переводов. Я делаю это в конструкторе, и когда я делаю:

installTranslator (&translator);
qDebug() << "Translation from PApplication:"
         << translate ("PAddFormWindow", "Dialog");

Верну очень правильный перевод (на русский). Но в моем приложении я вижу все на английском. Что еще хуже, я вижу это по-английски, даже когда пытаюсь получить перевод сразу после инициализации объекта приложения:

PApplication a ("PCorrect", argc, argv);
qDebug() << "Translation from void main():"
         << a.translate ("PAddFormWindow", "Dialog");

Так почему же это не сработает? Это потому, что я делаю это в конструкторе? Следует также отметить, что класс PApplication объявлен и определен не в самом приложении, а в динамически загружаемой библиотеке (я разрабатываю набор приложений). И что моей платформой является Windows XP с Qt 4.7.0.

1 Ответ

4 голосов
/ 17 декабря 2010

Возможно, что &translator в installTranslator(&translator) относится к локальной переменной, которая уничтожается при выходе из конструктора. Если installTranslator () не копирует его (документы не очень понятны по этой теме), может произойти все что угодно, включая нерабочие переводы или даже ошибки сегмента.

Фактически, документы дают нам подсказку: «Установка или удаление QTranslator, или изменение установленного QTranslator генерирует событие LanguageChange». Тот факт, что мы можем изменить переводчик, и это повлияет на что-то, говорит о том, что он не копируется. Но это все еще очень неясно. Он должен был четко сказать, копируется ли он или нет, и как мы должны обращаться с ним.

...