Название: русские буквы в qt-embedded Отправлено: kusmich от Декабрь 25, 2009, 12:46 Всем добрый день. ПРоблема в следующем.
На отладочной плате AT91SAM9261-EK (Atmel) использую файловую систему от Angstrom, собранную в Openembedded. Ядро linux-2.6.30. Запускаю qt-шное приложение на плате. Русские буквы не отображаются. В программе пользуюсь функциями setCodecForCStrings и setCodecForTr. Причем та же самая программка на моем компьютере нормально отображает русские символы. Скомпилировала пример qt-шный с кодеками examples/tools/codecs под мой АРМ, запустила на плате - такая же история - на месте русских букв ничего нет. Может, дело в том, что в моей файловой системе нет русских локалей??? Или я не права?? Подскажите, пожалуйста, в каком направлении копать. Видела много постов о русском языке на данном форуме. Но там все вопросы касаются просто qt, а не qt-embedded. Кстати, версия qt-embedded - 4.5.3. Спасибо. Название: Re: русские буквы в qt-embedded Отправлено: Rcus от Декабрь 25, 2009, 13:05 Первое что стоит проверить это шрифты
Название: Re: русские буквы в qt-embedded Отправлено: kusmich от Декабрь 25, 2009, 13:43 А имеет ли значение, с какими ключами собиралась QT-Embedded??? Там была опция, связанная с шрифтами -freetype/-no-freetype (я собирала без freetype). А Вы какие шрифты имеете в виду - которые в qt-шной папке lib/fonts или шрифты в файловой системе?
Название: Re: русские буквы в qt-embedded Отправлено: Dendy от Декабрь 25, 2009, 13:48 Посмотрите здесь:
http://doc.trolltech.com/4.5/qt-embedded-deployment.html Как минимум вам нужны шрифты и чтобы Qt их нашла. Если Qt лежит не в директории с префиксом, с которым она собрана - путь к шрифтам можно задать переменной окружения... забыл какой. Название: Re: русские буквы в qt-embedded Отправлено: Dendy от Декабрь 25, 2009, 13:51 И да - если ничего не мешает - собирайте уже Qt 4.6.0.
Название: Re: русские буквы в qt-embedded Отправлено: Rcus от Декабрь 25, 2009, 14:14 Если собирали без FreeType то нужно использовать специальный растровый формат шрифтов .qpf. С Qt поставляются несколько готовых вариантов и утилита makeqpf для преобразования векторных шрифтов. Если отображаются только символы из набора Latin-1 то скорее всего у вас включена Helvetica, переход на Fixed/Unifont может решить проблему. Для поиска шрифтов используется функция ($QTDIR/src/gui/text/qfontdatabase_qws.cpp)
Код
Название: Re: русские буквы в qt-embedded Отправлено: kusmich от Декабрь 25, 2009, 14:16 Cпасибо)) попробую все варианты :)
Название: Re: русские буквы в qt-embedded Отправлено: lit-uriy от Декабрь 25, 2009, 18:04 kusmich, по результатам пожалуйста отпишись
Название: Re: русские буквы в qt-embedded Отправлено: kusmich от Декабрь 26, 2009, 19:46 OK) надеюсь, получится!
Название: Re: русские буквы в qt-embedded Отправлено: kusmich от Январь 13, 2010, 17:27 Снова всем добрый день и с прошедшими праздниками)
Проблема с русскими буквами на отладочной плате частично решена! Я пересобрала библиотеку qt с поддержкой шрифтов (с ключом -qt-freetype) и сообщения на русском стали корректно отображаться, НО только в одном случае, а именно: в ф-ии main я делаю: Код: QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8")); Код: button->setText("С новым годом!"); НО стоит только попытаться вывести текст в другой кодировке (например, обработать строку, закодированную в windows-1251, приходящую с другого устройства по TCPIP), как выводятся опять каракули. Пробовала менять кодировку конкретно для данной строки (смотрела примеры с кодеками), но безрезультатно. Если сразу в main'е задать кодировку не UTF-8, а Windows-1251, то входящие строки на русском отображаются нормально, а то, что я сама задаю из программы, наоборот становится абракадаброй. Название: Re: русские буквы в qt-embedded Отправлено: BRE от Январь 13, 2010, 17:51 Пробовала менять кодировку конкретно для данной строки (смотрела примеры с кодеками), но безрезультатно. А можно код посмотреть как пытался?Это все решается чтением документации по QTextCodec. Название: Re: русские буквы в qt-embedded Отправлено: Dendy от Январь 13, 2010, 17:53 Всё верно, QString( const char * ) пропускает содержимое через кодек для C-строк. Естественно поскольку кодировки могут быть разные, то слепо пользоваться таким конструктором нельзя. Вообще кодек для C-строк скорее хак для старых программ, которые не поддерживают юникод и их нужно хоть как-то заставить работать. Я бы советовал забыть про QTextCodec::setCodecForCStrings() и QTextCodec::setCodecForTr() и явно выбирать кодировку при конструировании строк. То-есть писать не
Код: button->setText("С новым годом!"); Код: button->setText(QString::fromUtf8("С новым годом!")); При получении данных из сети делать Код: QString string = QTextCodec::codecForName("Windows-1251")->toUnicode(stringFromNetwork); Название: Re: русские буквы в qt-embedded Отправлено: kusmich от Январь 13, 2010, 19:38 Спасибо большое) Завтра попробую на работе :)
Название: Re: русские буквы в qt-embedded Отправлено: kusmich от Январь 17, 2010, 17:19 Всё верно, QString( const char * ) пропускает содержимое через кодек для C-строк. Естественно поскольку кодировки могут быть разные, то слепо пользоваться таким конструктором нельзя. Вообще кодек для C-строк скорее хак для старых программ, которые не поддерживают юникод и их нужно хоть как-то заставить работать. Я бы советовал забыть про QTextCodec::setCodecForCStrings() и QTextCodec::setCodecForTr() и явно выбирать кодировку при конструировании строк. Большое Вам спасибо) Все работает!!! |