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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Unicode в drawText  (Прочитано 19988 раз)
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« : Ноябрь 22, 2007, 00:35 »

QPainter painter(&Picture);
painter.drawText(10,10,"Вывожу текст русскими");

И после этого на картинке не правильно отображается кодировка.
При выводе английских букв все ок.
Как правилльно выводить текст на картинку Picture ?
Спасибо.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Ноябрь 22, 2007, 00:40 »

Посмотрите функции


void QTextCodec::setCodecForCStrings ( QTextCodec * codec )
void QTextCodec::setCodecForLocale ( QTextCodec * c )
void QTextCodec::setCodecForTr ( QTextCodec * c )

и выставите нужную кодировку
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #2 : Ноябрь 22, 2007, 01:09 »

Разобрался, спасибо.

QString str;
QTextCodec::codecForLocale()->toUnicode(str);
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Ноябрь 22, 2007, 01:32 »

Я имелл ввиду что-то типа этого

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));

попробуёте должно работать.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
ритт
Гость
« Ответ #4 : Ноябрь 22, 2007, 08:25 »

QTextCodec::codecForLocale()->toUnicode(str); - не самый верный подход
ты ж не браузер пишешь (наверняка) - зачем смешивать разные кодеки/локали?
установи локаль, котоорую собираешься использовать, один раз глобально - и всё...

я делаю так:
Код:
int main(int argc, char** argv)
{
#ifdef OVERRIDE_CODEC
QString codecName = QString(OVERRIDE_CODEC);
if(!codecName.isEmpty())
QTextCodec::setCodecForLocale(QTextCodec::codecForName(codecName));
#endif
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());

QApplication app(argc, argv);
[code]
[/code]
Записан
Alex03
Гость
« Ответ #5 : Ноябрь 22, 2007, 13:46 »

А что
1. "тролевый правильный подход" tr("English text") и *.ts *.qm чё никто не пользует?
2. trUtf8("текст хоть на 5-ти языках"), исходники в UTF8.
никто не пользует?

Я пока пользую первый, но смотрю на второй. Ибо текущие проекты локализовывать пока не предвидится, да и не факт что английский язык "главнее" русского. Улыбающийся
Записан
Вячеслав
Гость
« Ответ #6 : Ноябрь 22, 2007, 14:02 »

я юзаю только первый по причине использования проектов в форточках\линуксе\мсвс - и думать о кодировках - ну нах Грустный А trUtf8 - надо будет подумать Подмигивающий
Записан
ритт
Гость
« Ответ #7 : Ноябрь 22, 2007, 16:39 »

имеется в виду, что painter.drawText(10,10,tr("my russian text")) решит проблему?
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #8 : Ноябрь 22, 2007, 17:06 »

имеется в виду, что painter.drawText(10,10,tr("my russian text")) решит проблему?
Если написать в программе именно так, перевести, подгрузить перевод - то конечно решит. Вся проблема то у многих именно из-за Юникода. Кутя работает исключительно в нем (если конечно очень ее не попросить  Улыбающийся ), а строки народ пишет как-попало. Приведенный выше вариант с кодеками и есть как раз случай обмана/упрашивания Кути.
« Последнее редактирование: Ноябрь 22, 2007, 17:07 от Hellraiser » Записан
ритт
Гость
« Ответ #9 : Ноябрь 22, 2007, 18:50 »

хэллрайзер,
такое упрашивание приходится использовать, чтобы из лога читался _текст_, а не козюльки с разными кодировками

на самом деле для меня в этом коде по-настоящему важна только строка
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
т.к. codecForCStrings по умолчанию выставляется в латин1
а если уж при сборке был форсирован какой-то другой кодек, то имеет смысл проставить его и для тр'ок

везде использую "тролевый правильный подход" tr("English text")
trUtf8 не использую нигде, т.к. с кодом выше при сборке можно форсировать ютф-8 кодек и получить тот же эффект

так что, это не обманывание/упрашивание, а фича Улыбающийся
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #10 : Ноябрь 22, 2007, 18:54 »

Да я и сам так делаю...  Подмигивающий
Записан
Swappp
Гость
« Ответ #11 : Ноябрь 22, 2007, 20:43 »

А не проще ли исходники хранить в UTF-8? ИМХО второй по правильности вариант, после tr(), для случаев, когда в принципе нужен только один язык.
Записан
ритт
Гость
« Ответ #12 : Ноябрь 22, 2007, 21:10 »

когда у тебя несколько программистов, у каждого своя любимая среда разработки/ос и т.д., охреительное занятие потом искать какой сырец был сохранён в цп1251 Улыбающийся
и сырцы весят вдвое больше...
и кому это вообще надо - следить за кодирровкой в сорцах?

а когда _в принципе_ нужен только один язык, всё-равно надо пользоваться тр() - вот!
Записан
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #13 : Ноябрь 22, 2007, 21:17 »

когда делаю tr("русский текст") всеравно кодировка кривая..
Меня вариант
QString str;
QTextCodec::codecForLocale()->toUnicode(str);
Полностью устраивает..
Записан
IGHOR
Крякер
****
Offline Offline

Сообщений: 390



Просмотр профиля WWW
« Ответ #14 : Ноябрь 22, 2007, 21:28 »

Я имелл ввиду что-то типа этого

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));

попробуёте должно работать.

Это не работает.. всеравно каракули.

QTextCodec::codecForLocale()->toUnicode(str); - не самый верный подход
ты ж не браузер пишешь (наверняка) - зачем смешивать разные кодеки/локали?
установи локаль, котоорую собираешься использовать, один раз глобально - и всё...
А почему этот вариант плохой ? глюки могут быть ?
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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