Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Igors от Май 01, 2014, 10:03



Название: Французская буква
Отправлено: Igors от Май 01, 2014, 10:03
Добрый день

Аттач (сверху вниз): что пишу, как рисуется в Qt и как это в hex. Исходный текст приходит как С строка. Вывод средствами ОС - все норм (с теми же шрифтами), но Qt рисует какую-то фигню (причем страшно медленно). Не долго думая поменял на обычное "е", но получил замечание (типа неграмотный). Как порешать?

Спасибо


Название: Re: Французская буква
Отправлено: Old от Май 01, 2014, 10:07
В какой кодировке исходный файл?


Название: Re: Французская буква
Отправлено: Igors от Май 01, 2014, 10:13
В какой кодировке исходный файл?
А я и не знаю :) Наверное UTF-8. Исходная строка сишная, 1 байт на символ, а эта буква 2 байта, но рисуется норм и в любом текстовом редакторе и если вывести ее средствами ОС


Название: Re: Французская буква
Отправлено: Old от Май 01, 2014, 10:18
А я и не знаю :) Наверное UTF-8. Исходная строка сишная, 1 байт на символ, а эта буква 2 байта, но рисуется норм и в любом текстовом редакторе и если вывести ее средствами ОС
Попробуйте так:
Код
C++ (Qt)
dlg->setWindowTitle( trUtf8( "Ваша строка" ) );
 


Название: Re: Французская буква
Отправлено: Igors от Май 02, 2014, 05:13
Попробуйте так:
Код
C++ (Qt)
dlg->setWindowTitle( trUtf8( "Ваша строка" ) );
 
Да, так все работает, Но тут начались приключения. Проверил на тестовом примере - все норм. Вставил в приложение - не то. Разбираюсь: по каким-то (необъяснимым) причинам исходная сишная строка разная, т.е. copy/paste меняет символ. Методом втыка нашел что вот так
Код
C++ (Qt)
qDebug() << QString("B\xe9zier");
 
Работает напрямую. Но насколько это правильно/грамотно?

Спасибо


Название: Re: Французская буква
Отправлено: Old от Май 02, 2014, 07:43
Наверное где то в main есть строки QTextCodec::setCodecForXXX?


Название: Re: Французская буква
Отправлено: Igors от Май 02, 2014, 08:35
Методом втыка нашел что вот так
Код
C++ (Qt)
qDebug() << QString("B\xe9zier");
 
Работает напрямую.
Ан нет, это работает только на OSX, но не на Вындоуз. Причем "нормальная" строка (что рисуется как надо) имеет s[1] = 0xE9, но на Вындоуз я не могу подсунуть этот символ из С строки.

Наверное где то в main есть строки QTextCodec::setCodecForXXX?
Нету, пробовал добавлять - не имеет эффекта (хотя должно)


Название: Re: Французская буква
Отправлено: kambala от Май 02, 2014, 13:13
можно код символа записать через \uXXXX либо сделать его %1 и в arg() создавать через QChar(0xXXXX)


Название: Re: Французская буква
Отправлено: Igors от Май 02, 2014, 14:04
можно код символа записать через \uXXXX
Не выходит на Вындоуз, QString(char *) его замещает (хз почему)
либо сделать его %1 и в arg() создавать через QChar(0xXXXX)
Так да, если str[1] = 0xE9 (для QString) работает. Но это латка для "именно этой" строки, как обобщить?


Название: Re: Французская буква
Отправлено: mitrich от Июнь 06, 2014, 16:12
Код
C++ (Qt)
QString::fromUtf8("B\xC3\xA9zier")
 


Название: Re: Французская буква
Отправлено: sergek от Июнь 07, 2014, 11:16
Исходный текст приходит как С строка.
Я бы сделал так: строку перевел бы в QByteArray, создал бы кодек с кодировкой C-строки (ее все же нужно знать или подобрать), с помощью этого кодека преобразовал в Unicode.