LINUX.ORG.RU

Qt и кодировка ?


0

1

Добрый день. Долго думал, как озаглавить тему. Ничего лучше не придумал. Ну да ладно.

Проблема у меня в следующем. Есть проект на qt, нормально работал у меня на Дебиане, на других системах тоже, но понадобилось его перенести на систему, которая на koi8-r. До этого везде работала на utf-е. И выявилась непонятная проблема. В окнах, в QMessageBox например, получается разная кодировка для текста в окне и для заголовка. И если в файлах .cpp можно подставить разные кодеки для текста и заголовка, то в файлах .ui не представляю, как извратиться. Вот и решил выяснить почему, собственно, эта кодировка разная? Может подскажет кто, в каком направлении копать? Буду очень признателен. Сам не большой специалист в C вообще и в Qt в частности. Так что,если где коряво написал, не пинайте.

QMake version 2.01a Using Qt version 4.5.2


Ответ на: комментарий от schizoid

Даже не в курсе про эту систему (i18n) вообще. Видимо надо ознакомиться. Т.е. там может быть проблема?

r3p
() автор топика

В .ui всегда utf-8. В .cpp для Qt4 можно задать кодировку, и обвернуть все строки в макрос tr. Но в Qt5 эту возможность выпили. По этому правильный вариант, с конвертировать все исходники в utf-8.

alpha4
()
Ответ на: комментарий от anonymous

Кодиоровка не разная. Все файлы предварительно переводятся в кодировку koi8-r. Дело не в том, что она разная в разных файлах, а в том, что она должна быть разная внутри одного файла (для WindowTitle и основного текста).

r3p
() автор топика
Ответ на: комментарий от alpha4

Делал всё в utf-8. Для заголовка всё равно надо указывать koi8-r. Главный вопрос, из-за чего она (кодировка) разная? - остаётся. Почему для заголовка окна должна быть другая кодировка?

r3p
() автор топика
Ответ на: комментарий от r3p

QTranslator же. Функция tr(). Гуглить «internationalization with Qt». Можно использовать CODECFORTR, QTextCodec::codecForTr(). Так подхватятся строки из .ui (и вообще соберутся в одном месте).

А дальше играться с кодеками и локалями.

schizoid ★★★
()

всегда, запомни всегда юзай юникод для кода и ui в Qt4 и выше, а для отображения юзай перевод в необходимую кодировку средствами Qt4.

Каждый раз перекодировать под каждую локаль исходники это выстрел в ногу.

MikeDM ★★★★★
()
Ответ на: комментарий от alpha4

В .ui всегда utf-8. В .cpp для Qt4 можно задать кодировку, и обвернуть все строки в макрос tr. Но в Qt5 эту возможность выпили.

Вот же ж. А что предлагают вместо этого?

unfo ★★★★★
()

Может подскажет кто, в каком направлении копать?

перестать писать русский текст в исходники, и использовать tr()

alex_custov ★★★★★
()
Ответ на: комментарий от alex_custov

перестать писать русский текст в исходники, и использовать tr()

В .cpp именно с помощью tr() и удалось решить проблему. Но я не понимаю, как её применить к .ui
Пример:
Это должно быть в одной кодировке
<property name=«windowTitle»>
<string>Заголовок окна</string>
</property>

а это в другой
<property name=«title»>
<string>Просто заголовок</string>
</property>

r3p
() автор топика
Ответ на: комментарий от r3p

В ui тоже самое. Пишешь английский текст, lupdate добавит этот текст в .ts файлы. То что кодировка разная в заголовке и в окне может быть багом, попробуй 4.8.

alex_custov ★★★★★
()
Последнее исправление: alex_custov (всего исправлений: 1)
Ответ на: комментарий от alex_custov

То что кодировка разная в заголовке и в окне может быть багом, попробуй 4.8.

Да, попробую я, наверное, Qt обновить. Что-то всё туда, похоже, ведёт.
Всем спасибо. Много нового узнал.

r3p
() автор топика
Ответ на: комментарий от auto12884839

Заголовок окна отображается не приложением, а WM. Возможно нужно сконфигурить локаль правильно. Может быть это поможет.

Спасибо за ссылку.
Очень интересно.

r3p
() автор топика
Ответ на: комментарий от alpha4

В .cpp для Qt4 можно задать кодировку, и обвернуть все строки в макрос tr. Но в Qt5 эту возможность выпили.

Можно немного подробнее?

Потому что я и в Qt5 tr использую. Или оно теперь не работает?

Но вот тут (Qt 5.0/qtdoc) пишут:

Internationalization with Qt ... Use tr() for All Literal Text

DarkEld3r ★★★★★
()
Ответ на: комментарий от unfo

Необходимо использовать только с UTF-8, во имя будущего Вселенной.

I-Love-Microsoft ★★★★★
()

Здравствуйте! Это Антон Гешефтмахер беспокоит. Наши SEO-специалисты выяснили, что самое популярное слово на вашем сайте - это «QT». Наша ячейка МММ-2013 рада сообщить, что теперь и QT-специалисты могут вступить в наши ряды! Почему эти монополисты из Microsoft пользуются своим положением, чтобы продвигать Windows Media Player, когда как все знают, что QT гораздо более удобный и продвинутый! Когда кончится этот беспредел? Вступайте в нашу ячейку МММ-2013 и помогите QT стать самым лучшим плеером в мире!

anonymous
()
Ответ на: комментарий от DarkEld3r

В Qt4 можно было задать кодировку для tr, при помощи QTextCodec::setCodecForTr().

Соответственно если у тебя исходники в CP1251, просто подсовываешь соответствующий кодек, и пишешь в коде tr(«тряляля»). Очень было удобно стыковаться с уже существующим кодом.

В Qt5 выпилили setCodecForTr(). И сказали что исходники должны быть в UTF8. Т.е. если у тебя исходники в CP1251, то tr(«тряляля») превратится в мусор.

alpha4
()
Ответ на: комментарий от alpha4

В Qt5 выпилили setCodecForTr(). И сказали что исходники должны быть в UTF8. Т.е. если у тебя исходники в CP1251, то tr(«тряляля») превратится в мусор.

Понятно.

К счастью, меня (пока?) устраивает такое ограничение.

DarkEld3r ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.