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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Русский текст на QGraphicsView.  (Прочитано 7364 раз)
solo700
Гость
« : Май 12, 2010, 02:27 »

Не могу вывести русский текст на QGraphicsView. Установил кодировку:
   
   QTextCodec *rusCodec = QTextCodec::codecForName("CP1251");
   QTextCodec::setCodecForTr(rusCodec);
   QTextCodec::setCodecForCStrings(rusCodec);

Далее вывожу на QGraphicsView :

   QGraphicsTextItem *blinkTextItem;
   ...
   blinkTextItem=addText(str);

Выводится абракадабра. Помогите пожалуйста.

Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Май 12, 2010, 05:44 »

а str как заполняешь?
Записан

Юра.
jack_r
Гость
« Ответ #2 : Май 12, 2010, 10:15 »

Какая кодировка в редакторе?
Что если поставить кодировку в редакторе UTF-8 и установить такое же кодек в программе?
Код:
QTextCodec *rusCodec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForTr(rusCodec);
QTextCodec::setCodecForCStrings(rusCodec);
Записан
solo700
Гость
« Ответ #3 : Май 12, 2010, 14:20 »

Цитировать
а str как заполняешь?

Как только не заполнял :
str=tr("Старт 555");
str="Старт 555";

blinkTextItem=addText(str);
blinkTextItem=addText(tr(str));

Цитировать
QTextCodec *rusCodec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForTr(rusCodec);
QTextCodec::setCodecForCStrings(rusCodec);

Кодировку в редакторе менял на System, CP1251, KOI8-R, UTF-8
Выставлял аналогичный кодек - результата никакого.
Записан
ufna
Гость
« Ответ #4 : Май 12, 2010, 14:52 »

попробуй QTextCodec::codecForName("Windows-1251");
Записан
solo700
Гость
« Ответ #5 : Май 12, 2010, 15:19 »

Цитировать
Что если поставить кодировку в редакторе UTF-8 и установить такое же кодек в программе?

Проект создавался в System. Там полно русских комментов. Если в редакторе установить UTF-8, то при перезагрузки проекта Qt Creator не сможет перекодировать всё это. Придется перелапачивать ручками, что не есть гуд.
Цитировать
попробуй QTextCodec::codecForName("Windows-1251");

Не работает.

Прям засада какая то. В принципе заполнение строк из редактора это в качестве примера сделал ... и охренел. Заполнение будет из файлов. Думаю там я разберусь. Но вопрос какой то страшно принципиальный.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #6 : Май 12, 2010, 23:50 »

русские коменты при какой кодировке правильно отображаются? Т.е. с начало надо наверняка выяснить кодировку самого файла с исходным кодом.

Самый переносимый вариант, конечно, писать все строковые литералы по аглицки. Затем лингвистом сделать их перевод и подгрузить к программе.
Записан

Юра.
solo700
Гость
« Ответ #7 : Май 13, 2010, 01:43 »

Цитировать
русские коменты при какой кодировке правильно отображаются? Т.е. с начало надо наверняка выяснить кодировку самого файла с исходным кодом.

Проект параллельно ведется на виндах и линухе (точнее по одному на каждой системе). В виндах кодировка System в линухе CP1251. Обновляются последние измененные файлы (хидеры, исходники, формы - файлы проектов естественно не трогаются). Всё корректно отображается и работает. Текст на GraphicsView одинаково коряво отображается и в виндах и линухе.
Кстати интересный момент ...
Код:
void KViewFlasher::drawBackground(QPainter *painter, const QRectF &rect)
{
    Q_UNUSED(rect);
    QRectF sceneRect = this->sceneRect();
...
    painter->drawText(textRect, "Старт 555");
...
}
Этот вариант работает нормально во всех системах.
Но очень хотелось бы побороть коллекцию сцены.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #8 : Май 13, 2010, 13:44 »

>>Этот вариант работает нормально во всех системах.
этот вариант работает благодаря QTextCodec::setCodecForCStrings(rusCodec);
попробуй этот же код, только строку оберни в tr()
при этом кодек для tr должен быть такой как написал ufna, т.е.:
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
Записан

Юра.
solo700
Гость
« Ответ #9 : Май 13, 2010, 17:08 »

Цитировать
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));

Это я уже пробовал. Не работает.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #10 : Май 13, 2010, 20:59 »

>>Это я уже пробовал.
А при этом строку в tr() оборачивал?
Записан

Юра.
solo700
Гость
« Ответ #11 : Май 14, 2010, 00:21 »

Цитировать
А при этом строку в tr() оборачивал?

оборачивал
Код:
    QTextCodec *rusCodec = QTextCodec::codecForName("Windows-1251"); // в функции main
    QTextCodec::setCodecForTr(rusCodec);
    QTextCodec::setCodecForCStrings(rusCodec);

    blinkTextItem=addText(tr("Старт 555"));// в другой функции

абракадабра
Записан
solo700
Гость
« Ответ #12 : Май 14, 2010, 03:10 »

Добил сцену.
Неработающий вариант этот :
Код:
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;

    QTextCodec *rusCodec = QTextCodec::codecForName("CP1251");
    QTextCodec::setCodecForTr(rusCodec);
    QTextCodec::setCodecForCStrings(rusCodec);

    w.show();
    return a.exec();
}
Пробный русский текст загонял в конструкторе сцены, ктр. отрабатывался в MainWindow w ... а русского кодека ещё не было. А на виде в drawBackground паинтером пробный текст отрисовывался корректно.
Работающий вариант этот:
Код:
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QTextCodec *rusCodec = QTextCodec::codecForName("CP1251");
    QTextCodec::setCodecForTr(rusCodec);
    QTextCodec::setCodecForCStrings(rusCodec);

    MainWindow w;
    w.show();
    return a.exec();
}
Пытался вспомнить с какого перепоя когда то я так кодек разместил? Не вспомнил. Вошло в привычку.
Всем спасибо !
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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