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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Французская буква  (Прочитано 5488 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Май 01, 2014, 10:03 »

Добрый день

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

Спасибо
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Май 01, 2014, 10:07 »

В какой кодировке исходный файл?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Май 01, 2014, 10:13 »

В какой кодировке исходный файл?
А я и не знаю Улыбающийся Наверное UTF-8. Исходная строка сишная, 1 байт на символ, а эта буква 2 байта, но рисуется норм и в любом текстовом редакторе и если вывести ее средствами ОС
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Май 01, 2014, 10:18 »

А я и не знаю Улыбающийся Наверное UTF-8. Исходная строка сишная, 1 байт на символ, а эта буква 2 байта, но рисуется норм и в любом текстовом редакторе и если вывести ее средствами ОС
Попробуйте так:
Код
C++ (Qt)
dlg->setWindowTitle( trUtf8( "Ваша строка" ) );
 
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Май 02, 2014, 05:13 »

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

Спасибо
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #5 : Май 02, 2014, 07:43 »

Наверное где то в main есть строки QTextCodec::setCodecForXXX?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Май 02, 2014, 08:35 »

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

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

Сообщений: 4746



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

можно код символа записать через \uXXXX либо сделать его %1 и в arg() создавать через QChar(0xXXXX)
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Май 02, 2014, 14:04 »

можно код символа записать через \uXXXX
Не выходит на Вындоуз, QString(char *) его замещает (хз почему)
либо сделать его %1 и в arg() создавать через QChar(0xXXXX)
Так да, если str[1] = 0xE9 (для QString) работает. Но это латка для "именно этой" строки, как обобщить?
Записан
mitrich
Гость
« Ответ #9 : Июнь 06, 2014, 16:12 »

Код
C++ (Qt)
QString::fromUtf8("B\xC3\xA9zier")
 
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #10 : Июнь 07, 2014, 11:16 »

Исходный текст приходит как С строка.
Я бы сделал так: строку перевел бы в QByteArray, создал бы кодек с кодировкой C-строки (ее все же нужно знать или подобрать), с помощью этого кодека преобразовал в Unicode.
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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