Название: Unicode в drawText Отправлено: IGHOR от Ноябрь 22, 2007, 00:35 QPainter painter(&Picture);
painter.drawText(10,10,"Вывожу текст русскими"); И после этого на картинке не правильно отображается кодировка. При выводе английских букв все ок. Как правилльно выводить текст на картинку Picture ? Спасибо. Название: Re: Unicode в drawText Отправлено: pastor от Ноябрь 22, 2007, 00:40 Посмотрите функции
void QTextCodec::setCodecForCStrings ( QTextCodec * codec ) void QTextCodec::setCodecForLocale ( QTextCodec * c ) void QTextCodec::setCodecForTr ( QTextCodec * c ) и выставите нужную кодировку Название: Re: Unicode в drawText Отправлено: IGHOR от Ноябрь 22, 2007, 01:09 Разобрался, спасибо.
QString str; QTextCodec::codecForLocale()->toUnicode(str); Название: Re: Unicode в drawText Отправлено: pastor от Ноябрь 22, 2007, 01:32 Я имелл ввиду что-то типа этого
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251")); попробуёте должно работать. Название: Re: Unicode в drawText Отправлено: ритт от Ноябрь 22, 2007, 08:25 QTextCodec::codecForLocale()->toUnicode(str); - не самый верный подход
ты ж не браузер пишешь (наверняка) - зачем смешивать разные кодеки/локали? установи локаль, котоорую собираешься использовать, один раз глобально - и всё... я делаю так: Код: int main(int argc, char** argv) Название: Re: Unicode в drawText Отправлено: Alex03 от Ноябрь 22, 2007, 13:46 А что
1. "тролевый правильный подход" tr("English text") и *.ts *.qm чё никто не пользует? 2. trUtf8("текст хоть на 5-ти языках"), исходники в UTF8. никто не пользует? Я пока пользую первый, но смотрю на второй. Ибо текущие проекты локализовывать пока не предвидится, да и не факт что английский язык "главнее" русского. :) Название: Re: Unicode в drawText Отправлено: Вячеслав от Ноябрь 22, 2007, 14:02 я юзаю только первый по причине использования проектов в форточках\линуксе\мсвс - и думать о кодировках - ну нах :( А trUtf8 - надо будет подумать ;)
Название: Re: Unicode в drawText Отправлено: ритт от Ноябрь 22, 2007, 16:39 имеется в виду, что painter.drawText(10,10,tr("my russian text")) решит проблему?
Название: Re: Unicode в drawText Отправлено: Hellraiser от Ноябрь 22, 2007, 17:06 имеется в виду, что painter.drawText(10,10,tr("my russian text")) решит проблему? Если написать в программе именно так, перевести, подгрузить перевод - то конечно решит. Вся проблема то у многих именно из-за Юникода. Кутя работает исключительно в нем (если конечно очень ее не попросить :) ), а строки народ пишет как-попало. Приведенный выше вариант с кодеками и есть как раз случай обмана/упрашивания Кути.Название: Re: Unicode в drawText Отправлено: ритт от Ноябрь 22, 2007, 18:50 хэллрайзер,
такое упрашивание приходится использовать, чтобы из лога читался _текст_, а не козюльки с разными кодировками на самом деле для меня в этом коде по-настоящему важна только строка Код: QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale()); а если уж при сборке был форсирован какой-то другой кодек, то имеет смысл проставить его и для тр'ок везде использую "тролевый правильный подход" tr("English text") trUtf8 не использую нигде, т.к. с кодом выше при сборке можно форсировать ютф-8 кодек и получить тот же эффект так что, это не обманывание/упрашивание, а фича :) Название: Re: Unicode в drawText Отправлено: Hellraiser от Ноябрь 22, 2007, 18:54 Да я и сам так делаю... ;)
Название: Re: Unicode в drawText Отправлено: Swappp от Ноябрь 22, 2007, 20:43 А не проще ли исходники хранить в UTF-8? ИМХО второй по правильности вариант, после tr(), для случаев, когда в принципе нужен только один язык.
Название: Re: Unicode в drawText Отправлено: ритт от Ноябрь 22, 2007, 21:10 когда у тебя несколько программистов, у каждого своя любимая среда разработки/ос и т.д., охреительное занятие потом искать какой сырец был сохранён в цп1251 :)
и сырцы весят вдвое больше... и кому это вообще надо - следить за кодирровкой в сорцах? а когда _в принципе_ нужен только один язык, всё-равно надо пользоваться тр() - вот! Название: Re: Unicode в drawText Отправлено: IGHOR от Ноябрь 22, 2007, 21:17 когда делаю tr("русский текст") всеравно кодировка кривая..
Меня вариант QString str; QTextCodec::codecForLocale()->toUnicode(str); Полностью устраивает.. Название: Re: Unicode в drawText Отправлено: IGHOR от Ноябрь 22, 2007, 21:28 Я имелл ввиду что-то типа этого QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251")); попробуёте должно работать. Это не работает.. всеравно каракули. QTextCodec::codecForLocale()->toUnicode(str); - не самый верный подход А почему этот вариант плохой ? глюки могут быть ?ты ж не браузер пишешь (наверняка) - зачем смешивать разные кодеки/локали? установи локаль, котоорую собираешься использовать, один раз глобально - и всё... Название: Re: Unicode в drawText Отправлено: pastor от Ноябрь 22, 2007, 21:49 Это не работает.. всеравно каракули. Полный код в студию. У меня работает все прекрасно! BWT: какая ось? Название: Re: Unicode в drawText Отправлено: IGHOR от Ноябрь 22, 2007, 21:53 Это не работает.. всеравно каракули. Полный код в студию. У меня работает все прекрасно! BWT: какая ось? Ось линух, код на другом компе, на данный момент передать его нечем. Я написал это QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251")); в срр класа главного окна, в каком и рисую текст. Может в другом месте нужно писать ? Название: Re: Unicode в drawText Отправлено: Вячеслав от Ноябрь 22, 2007, 21:57 когда делаю tr("русский текст") всеравно кодировка кривая.. так и должно быть (про кодировку) tr подставляет строку из внешнего qm файла ;)Меня вариант QString str; QTextCodec::codecForLocale()->toUnicode(str); Полностью устраивает.. Тебе-же показали QTrnaslator *trans=new QTranslator; trans->load("my_app_ru.qm"); qApp->installTranslator(trans); QString ru=tr("en"); Ы ? и посмотреть на lupdate/lrelease/linguist'а и IMHO динамический codecForLocale() неверен - исходник-то в одной кодировке .... А если локаль будет другая ? Вариант xep'а лучшее ;) Название: Re: Unicode в drawText Отправлено: pastor от Ноябрь 22, 2007, 21:58 Ось линух, код на другом компе, на данный момент передать его нечем. Я написал это QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251")); в срр класа главного окна, в каком и рисую текст. Может в другом месте нужно писать ? Попробуй написать QTextCodec::codecForName("utf8"); вместо QTextCodec::codecForName("Windows-1251") - это я указал например Название: Re: Unicode в drawText Отправлено: Вячеслав от Ноябрь 22, 2007, 21:58 Это не работает.. всеравно каракули. Полный код в студию. У меня работает все прекрасно! BWT: какая ось? Ось линух, код на другом компе, на данный момент передать его нечем. Я написал это QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251")); в срр класа главного окна, в каком и рисую текст. Может в другом месте нужно писать ? Название: Re: Unicode в drawText Отправлено: IGHOR от Ноябрь 22, 2007, 22:06 Ось линух, код на другом компе, на данный момент передать его нечем. Я написал это QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251")); в срр класа главного окна, в каком и рисую текст. Может в другом месте нужно писать ? Попробуй написать QTextCodec::codecForName("utf8"); вместо QTextCodec::codecForName("Windows-1251") - это я указал например Да, так QTextCodec::codecForName("utf8") работает, Спасибо, так действительно удобнее Название: Re: Unicode в drawText Отправлено: Swappp от Ноябрь 22, 2007, 22:13 когда у тебя несколько программистов, у каждого своя любимая среда разработки/ос и т.д., охреительное занятие потом искать какой сырец был сохранён в цп1251 :) Ну это можно и нужно решать административными методами :) тем более сейчас любая современная среда и редактор поддерживают UTF-8. А комментарии все наверно тоже исключительно на английском пишут?Цитировать и сырцы весят вдвое больше... Правда? В UTF-8 все символы <=127 кодируются одним байтом. В два раза больше исходники будут весить в случае, если они полностью написаны на русском, без использования знаков препинания, цифр, пробелов и т.п. :) либо если используется много символов с кодом >2047, но это уже не кириллица.Цитировать и кому это вообще надо - следить за кодирровкой в сорцах? Следить не надо, ведь есть внутренние соглашения, по стилю кодинга и т.п. (или каждый лепит код кто во что горазд? а потом, в случае ухода кого то из команды, при необходимости внести изменения в написаный им код, его переписывают с нуля?), так вот это всего лишь еще один пункт в нем.Цитировать а когда _в принципе_ нужен только один язык, всё-равно надо пользоваться тр() - вот! Зачем?p.s. сам всегда пишу с tr() :) Название: Re: Unicode в drawText Отправлено: Alex03 от Ноябрь 23, 2007, 07:36 Swappp +1
Всем кто чтото не понимает в кодировках в Qt читать документик QTDIR/doc/html/i18n.html Название: Re: Unicode в drawText Отправлено: IGHOR от Ноябрь 24, 2007, 02:40 Всем Спасибо!
Название: Re: Unicode в drawText Отправлено: IGHOR от Ноябрь 26, 2007, 07:21 Всем Опять Привет!
Теперь я читаю базу данных MYSQL достаю оттуда масив QString"ов и ллю на форму в textDraw и русские символы не отображаются.. одни знаки ?????????????? И перепробовал базу сохранять в всех кодировках.. и QTextCodec настраивал, ничего не выходит Как выправить такое ? Название: Re: Unicode в drawText Отправлено: Вячеслав от Ноябрь 26, 2007, 09:24 Всем Опять Привет! поиск рулит по форуму http://prog.org.ru/forum/index.php/topic,4344.0.html (http://prog.org.ru/forum/index.php/topic,4344.0.html)Теперь я читаю базу данных MYSQL достаю оттуда масив QString"ов и ллю на форму в textDraw и русские символы не отображаются.. одни знаки ?????????????? И перепробовал базу сохранять в всех кодировках.. и QTextCodec настраивал, ничего не выходит Как выправить такое ? Название: Re: Unicode в drawText Отправлено: IGHOR от Ноябрь 27, 2007, 19:03 Всем СПАСИБО за помощь. Все разобрался.
Удачи Всем!! Название: Re: Unicode в drawText Отправлено: Cyrax от Декабрь 18, 2007, 18:04 Что-то не понятно совсем.
Все кодировки базы данных MySQL 5 настроены на cp1251 - кодировка БД по умолчанию, кодировки таблиц, полей. В базу данных заносится информация на русском языке, например, слово "Монитор". Далее я в php-скрипте выполняю команды: Цитировать mysql_query ("set names 'cp1251'"); После чего получаю нормальный русский текст, который вывожу на web-страницу.mysql_query ("set collation_connection='cp1251_general_ci'"); теперь то же самое делаю в Qt-программе с той же самой БД, с той же таблицей и записью: Цитировать QSqlQuery q1("set names 'cp1251'"); bool t = q1.exec(); // возвращает true QSqlQuery q2("set collation_connection='cp1251_general_ci'"); t = q2.exec(); // возвращает true QSqlQuery query("SELECT * FROM article"); t = query.exec(); // возвращает true query.first(); QSqlRecord rec = query.record(); QString txt = rec.value("fullName").toString(); dep.setWindowTitle(txt); В результате получаю в заголовке козяблики (но не вопросительные знаки). Все 3 запроса выполняются нормально (exec() возвращает true). Предварительно устанавливаю: Цитировать QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251")); QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251")); QTextCodec::setCodecForLocale(QTextCodec::codecForName("Windows-1251")); Если в последней строке фрагмента кода txt перегнать в latin1: Цитировать dep.setWindowTitle(txt.toLatin1()); то получаю то, что нужно: "Монитор".Если убрать установку кодеков в Windows-1251, то в случае с "dep.setWindowTitle(txt.toLatin1())" получаю те же козяблики, что с установкой кодеков, но без перегона в Latin1. Если запросы, устанавливающие русскую кодировку для соединения, убрать, то в обоих случаях ("dep.setWindowTitle(txt);" и "dep.setWindowTitle(txt.toLatin1());" получаю 7 вопросительных знаков... Вот получает объект QSqlQuery от сервера 7 байтов в кодировке cp1251. Далее через QVariant загоняю их в QString. При этом он "знает", что получил байты в cp1251, поскольку кодеки настроены на cp1251. Тем не менее, получаю что-то, что приходитося перегонять в Latin1 для того, чтобы получить cp1251... Название: Re: Unicode в drawText Отправлено: Вячеслав от Декабрь 18, 2007, 18:35 РРРРРРРРР !!!!!!!!!!!!
QVAriant работает в данном случае с QString'om QStirng - это _всегда_ юникод без всяких "помнит о кодеке" Поидее heuristicCodec в mysql драйвере (плагине) _должен_ из 1251 сделать юникод , если нет - то можно 1) попробывать вытащить _какой_ кодек он (плагин) использует и допинать его в нужном направлении 2) почитать ссылку 3 постами выше Ы ? Название: Re: Unicode в drawText Отправлено: Cyrax от Декабрь 18, 2007, 19:13 Цитировать Поидее heuristicCodec в mysql драйвере (плагине) _должен_ Должен - не должен, но почему-то заплатки ставить приходится. В src\sql\drivers\mysql\qsql_mysql.cpp заменилЦитировать QTextCodec* heuristicCodec = QTextCodec::codecForName(mysql_character_set_name(mysql)) наЦитировать QTextCodec* heuristicCodec = QTextCodec::codecForName("Windows-1251"); Пересобрал, теперь получаю русский текст без toLatin1()...Меня такой вопрос интересует. В своём предыдущем посте я привёл фрагмент кода. Где там у меня ошибка, приводящая к проблеме с русской кодировкой ? |