Russian Qt Forum

Qt => Интернационализация, локализация => Тема начата: LamerDrv от Июль 26, 2005, 08:13



Название: Русский язык в редакторе форм под VS2003
Отправлено: LamerDrv от Июль 26, 2005, 08:13
Проблема с отображением русских букв.
Когда делаю проект на QT4.0.0 в Visual Studio херяться русский буквы в визуальных элементах (таких как QButton, QLabel).

Размещаю элемент, пишу ему caption по-русски, вроде нормально. Затем закрываю и основа открываю форму и вместо русских букв - карозяболы. При запуске проги тоже карозяболы.

Такое впечатление, что проблема вызвана использованием неправильной кодовой страницы при чтении ui-файла QT-шными утилитами. Т.е., возможно, когда при редактировании формы в VS2003 пишу русские символы используется Win1251, а при последующем открытии ui-файла для редактирования формы (или его обработке uic-ом) - используется utf-8.

Подскажите, пожалуйста, куда копать?


Название: Русский язык в редакторе форм под VS2003
Отправлено: LamerDrv от Июль 27, 2005, 12:40
Народ, неужели никто не использует Visual Studio 2003 вместе с QT.
Мне кажеться эти грабли должны лежать на поверхности, в том смысле, что на них сразу настпупаешь как только создаешь на форме виджет с русским текстом.
Редактор форм и uic действительно обрабатывают xml-ный ui-файл как utf-8. При этом русский текст записывается в этот файл как Windows-1251.

Единственный способ которым мне пока удалось добиться нормальной работы программы - это вручную преобразовать ui-файл в UTF-16 и нажать компиляцию. Но это не годиться, потому что как только открываешь форму в редакторе и сохраняешь - ui-файл опять становится utf-8. Включить в файл явное указание кодировки нельзя, потому что uic ожидает, что самым первым тэгом дложен быть "ui version".

Интересно как заставить редактор форм помещать национальные символы в ui-файл в правильной кодировке?
Помоги-и-и-те-е-е ! Пожалуйста.


Название: Русский язык в редакторе форм под VS2003
Отправлено: KOSchMAR от Июль 27, 2005, 15:32
Цитировать
Народ, неужели никто не использует Visual Studio 2003 вместе с QT.


2003 то используют  , но на QT4 перешли не все
 Visual Studio 2003  c QT 3.3.3 все нормально


Название: Русский язык в редакторе форм под VS2003
Отправлено: LamerDrv от Июль 28, 2005, 15:46
Так вообще у кого-нибудь редактор форм интегрированный в Visual Studio обрабатывает нормально русский текст? (Я имею ввиду интегратор от QT4 ). Или народ использует отдельный дизайнер?

Пока что из-за желания делать проект польностью в Visual Studio (включая рисование форм) пришлось патчить. Но все еще надеюсь что есть нормальный (в смысле штатный способ) разрулить работу с русским языком.


Название: Русский язык в редакторе форм под VS2003
Отправлено: Racheengel от Июль 28, 2005, 17:50
А если ГУИ на инглише делать, а потом в Лингвисте ленгвич-паки лабать?


Название: Русский язык в редакторе форм под VS2003
Отправлено: LamerDrv от Июль 29, 2005, 07:22
Цитата: "Racheengel"
А если ГУИ на инглише делать, а потом в Лингвисте ленгвич-паки лабать?


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

З.Ы:
Пока что пришлось сделать специальную версию qtcore4.dll, в которой реализация QTextStream по-дефолту выполняет перекодировку в utf8 и положить эту dll-ку в подкаталог bin интегратора. Вроде стало нормально. (Designer.exe выполняет такую перкодировку явно при сохранении ui-файла. А вот в интеграторе, если дизассемблер не врет, это сделать забыли). Если если кому-нибудь надо ...


Название: Русский язык в редакторе форм под VS2003
Отправлено: SLiDER от Июль 29, 2005, 21:00
Я бы, в принципе, не отказался от такой ДЛЛки. 8)


Название: Русский язык в редакторе форм под VS2003
Отправлено: LamerDrv от Июль 30, 2005, 08:44
Цитата: "SLiDER"
Я бы, в принципе, не отказался от такой ДЛЛки. 8)


Ловите.  :wink:

В конец конструктора  QTextStream::QTextStream ( QIODevice * device ) я добавил строки (в файле qtextstream.cpp):

    if (device->openMode() == QIODevice::WriteOnly)
        setCodec(QTextCodec::codecForName("UTF-8"));

После вносения указанного изменения, пересобрал qtcore4.dll (запускал qmake и namke из папки <QTDIR>\src\corelib, чтобы пересобрать только qtcore4.dll, а не все dll-ки). Скопировал  полученную qtcore4.dll  из <QTDIR>\bin в интегратор
(в директории <QTDIR>\bin восстановил оригинальную версию qtcore4.dll).
Суть патча в том, что если входной параметр device представляет
утсройство открытое в режиме только для записи то для устанавливается текстовог потока принудительно задается кодек utf-8.

З.Ы.: В принципе могу выслать готовую dll-ку.