перевод Q_PROPERTY |
Здравствуйте, гость ( Вход | Регистрация )
перевод Q_PROPERTY |
a_goodgirl |
7.7.2010, 12:30
Сообщение
#1
|
|
Студент Группа: Участник Сообщений: 35 Регистрация: 4.6.2009 Пользователь №: 801 Спасибо сказали: 0 раз(а) Репутация: 0 |
Спасибо всем, кто уже отвечал на вопросы! Возможно, ответы пригодились и еще кому-то :-)
Вот такой вопрос: В неком классе есть обычные свойства, например:
реализован свой property editor, усовершенствованный собрат такого же, как в дизайнере. Имя свойства берется из QMetaProperty->name(). Как сделать, чтобы можно было задать перевод свойства? Чтобы, например, было написано "Имя файла". Может, кто-то посоветует, в какую сторону хотя бы рыть? Начальник мне посоветовал попробовать переписать lupdate и lrelease. Там много букв.. |
|
|
||
Litkevich Yuriy |
7.7.2010, 13:44
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
SABROG |
7.7.2010, 14:24
Сообщение
#3
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Может, кто-то посоветует, в какую сторону хотя бы рыть? надо смотреть как это сделано в Дизайнере. Т.к. в дизайнере эти вещи в версиях 4.6 и выше переведены (если переводчики постарались)У меня такого не наблюдается ни в QtCreator'e, ни в дизайнере. Аналогичная тема без решения. http://www.qtcentre.org/threads/29779-How-...language-change |
|
|
a_goodgirl |
7.7.2010, 14:27
Сообщение
#4
|
Студент Группа: Участник Сообщений: 35 Регистрация: 4.6.2009 Пользователь №: 801 Спасибо сказали: 0 раз(а) Репутация: 0 |
|
|
|
SABROG |
7.7.2010, 14:44
Сообщение
#5
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Если честно, то я бы расстроился переводу имен свойств, так как не смог бы найти в документации их описания.
|
|
|
Litkevich Yuriy |
7.7.2010, 15:30
Сообщение
#6
|
|||
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
сли честно, то я бы расстроился переводу имен свойств, так как не смог бы найти в документации их описания. если бы свойства работали точно в соответствии с их названием (в первую очередь это относится к компоновке), то не было бы нужды их искать в документации. Вообще полный перевод был бы намного удобнее, но это трудно осуществимо.Я, например, для себя многое перевёл: кое-что раскопал, например свойство горизонтального выравнивания создаётся так:
Файл %QTDIR%\tools\designer\src\components\propertyeditor\designerpropertymanager.cpp строка 1799 (Qt 4.6.0) |
|||
|
||||
a_goodgirl |
7.7.2010, 16:25
Сообщение
#7
|
Студент Группа: Участник Сообщений: 35 Регистрация: 4.6.2009 Пользователь №: 801 Спасибо сказали: 0 раз(а) Репутация: 0 |
вы немного не понимаете сути проблемы. Речь идет совсем не о дизайнере - просто все видели в нем property editor и так проще объяснить, как он выглядит.
Классы написаны свои, пользовательские. Свойства у них могут быть какие угодно. Пользователь, который никогда дизайнера в глаза не видел и что такое qt не знает, должен видеть в приложении переведенные имена, а иначе это не имеет смысла (например, "Количество таблиц") Property Editor работает так: для каждого типа (QVariant, могут быть собственные типы) определены фабрика и менеджер, есть map, связывающий тип свойства и фабрику(менеджер). Например, свойство size имеет тип QSize. Конкретно для него релизован интерфейс QtSizePropertyManager, в котором "зашиты" width и height, и в этом локальном месте они обложены tr, поэтому мы видим "Ширина", "Высота".
Если задать свойство с именем Vasya типа QSize, то увидим в дереве то же самое Vasya Ширина Высота Речь же идет о том, что надо перевести слова size и Vasya, т.е. имена свойств, задаваемые в Q_PROPERTY. В приведенным Вами примерах (на картинках) НИ ОДНО имя свойства не переведено. property editor в общем тут совсем не при чем :-) Хотелось бы как-то задавать свойству QMetaProperty имя, обложенное tr. Например, понять, как работает макрос Q_PROPERTY - как он из строки кладет в некую структуру d класса QMetaProperty, откуда потом берется name() |
|
|
SABROG |
7.7.2010, 16:46
Сообщение
#8
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
вы Я то как раз это вижу. Похоже есть только один вариант - научить свой Property Editor читать какие-то дополнительные поля у объектов содержащих свойства. Соответственно где-то придется дублировать названия всех свойств, чтобы можно было применить функцию tr(). Пример из документации:
Значит в своем объекте придется завести массив статических имен свойств:
Недостаток в том, что имена свойств приходиться дублировать, подружить lupdate и moc в этом плане не получается, так как ни в одном из них нет возможности использовать аналог препроцессорных переменных. --- Еще можно попробовать такой трюк:
Сообщение отредактировал SABROG - 7.7.2010, 17:29 |
|
|
a_goodgirl |
7.7.2010, 18:05
Сообщение
#9
|
Студент Группа: Участник Сообщений: 35 Регистрация: 4.6.2009 Пользователь №: 801 Спасибо сказали: 0 раз(а) Репутация: 0 |
не видит lupdate его. Но и первый вариант что-то не получается.. Находит в цикле
нужное имя, но (если печатать например в qDebug) - оно непереведенное, хотя вроде бы в лингвисте оно переведено. Сейчас еще подумаю, где что может быть не так. Хотя в таком виде вариант все равно не годится - в приложении уже около сотни классов, приделывать к каждому такую функцию - невозможно без какой-то оптимизации кода. ============================ первый вариант работает |
|
|
Алексей1153 |
7.7.2010, 18:05
Сообщение
#10
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Для ускорения поиска можно ассоциативный контейнер std::map приделать. А как унифицировать функцию заполнения и поиска для всех классов... Тут приходит в голову только описать в виде макроса и вставить во все нужные классы (в статическую функцию класса). Первый вызов функции дополнительно ещё заполним мап, а все остальные - только произведут поиск
|
|
|
Текстовая версия | Сейчас: 21.12.2024, 2:59 |