Russian Qt Forum
Ноябрь 23, 2024, 02:50 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: РЕШЕНО: Непонятное поведение при смене контекста  (Прочитано 5630 раз)
xelax
Гость
« : Ноябрь 30, 2009, 23:39 »

Здравствуйте.
Я в ауте... Вводные:
Имеется приложение, оно работает  Подмигивающий Возник вопрос интернационализации. Имеется файл ts, все строки, выдающиеся пользователю обернуты в tr. Реализовал динамическую смену языка по требованию пользователя.
Проблема:
В классе, насленике QMainWindow, в одном из методов ругаемся пользователю вот так:
Код:
QMessageBox::question(this, "MapConvertor"
               ,tr("Do you really want to quit?")
               ,QMessageBox::Yes | QMessageBox::No
               ,QMessageBox::No)

Запускаем в аглицком варианте перевода - все хорошо. Сменяем на русский - сообщение Do you really want to quit? выдается на аглицком. Хотя в лингвисте переведен. Даже в ts заглянул. При дальнейших раскопках видно, что это происходит со ВСЕМИ подобными вызовами. А теперь внимание: если написать так
Код:
QMessageBox::question(this, "MapConvertor"
               ,QObject::tr("Do you really want to quit?") // <----
               ,QMessageBox::Yes | QMessageBox::No
               ,QMessageBox::No)
то все работает как надо, переводится. Ощущение что дело где то контексте.
Весь день пытался понять в чем дело. Если кто сталкивался, пожалуйста, подскажите, где я дурак.
« Последнее редактирование: Декабрь 03, 2009, 14:41 от xelax » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Декабрь 01, 2009, 04:17 »

а при таких изменениях, в лингвисте положение данной строки меняется (из одного контекста в другой)?
Записан

Юра.
xelax
Гость
« Ответ #2 : Декабрь 01, 2009, 11:07 »

Да, положение строки меняется в лингвисте, переходит из MainWindow в QObject и обратно. И даже помечается как obsolete, т.е. для ее удаления запускаю lupdate -no-obsolete.
Запускаю и компилю в Kubuntu 9.10. Надо будет в винде попробовать сегодня.
Записан
xelax
Гость
« Ответ #3 : Декабрь 01, 2009, 21:57 »

Интереса ради попробую сегодня в Qt 4.6
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Декабрь 01, 2009, 22:50 »

проверил на 4.4.3, оба варианта работают.

Ты не забыл указать кодировку? (хотя при этом видел бы просто лажу)
Записан

Юра.
xelax
Гость
« Ответ #5 : Декабрь 01, 2009, 22:58 »

Нет, с кодировкой я ничего не делал, т.к. в остальных диалогах то работает. Тупизм появляется только в наследнике QMainWindow.
Записан
xelax
Гость
« Ответ #6 : Декабрь 03, 2009, 14:32 »

Все разрешилось путем сборки в Qt 4.6
Я ничего не меняя сравнил работу в 4.5 и в 4.6. В 4.6. как надо все.
Записан
Dendy
Гость
« Ответ #7 : Декабрь 10, 2009, 01:49 »

Уж не знаю в чём была причина, но первая мысль - в наследнике QMainWindow был забыт макрос Q_OBJECT. Следовательно - при переводе брался контекст QMainWindow, а не MainWindow.
Записан
xelax
Гость
« Ответ #8 : Декабрь 10, 2009, 17:20 »

Насчет макроса - это первое что я посмотрел. Он был. В принципе, бог с ним, сейчас проблема пропала.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.052 секунд. Запросов: 22.