crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> QListWidget, проблема с кодирвкой
Borodeys
  опции профиля:
сообщение 14.6.2011, 8:52
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 23
Регистрация: 10.4.2011
Пользователь №: 2588

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем привет. Проблема вот в чем: после вставки в ListWidget строк с русским текстом, на экране отображается какая-то кракозябра. Тоже само происходит и с элементом Label.
    QListWidgetItem * newItem = new QListWidgetItem;
    QTime time;
    time = time.currentTime();
    newItem->setText( "["+(time.toString())+("]")+(" - Начато формирование технологических отчетов"));
    newItem->setIcon(QIcon(":/images/cog_go.png"));
    ui->listWidget->insertItem(0, newItem);

Как быть? Играл с кодировками и языком в настройках Qt - не помогло.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 14.6.2011, 9:15
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

Спасибо сказали: 40 раз(а)




Репутация:   6  


Цитата(Borodeys @ 14.6.2011, 11:52) *
Играл с кодировками и языком в настройках Qt - не помогло.


А в самом проекте Вы кодировку какую указываете?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 14.6.2011, 9:53
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Borodeys @ 14.6.2011, 12:19) *
Играл с кодировками и языком в настройках Qt
это где такое место?

Чтобы использовать строковые константы содержащие символы не Latin-1, нужно указать Qt какая кодировка исходника.
Самый простой способ:
1) Кодировка исходника - UTF-8
2) Все строковые константы оборачиваем в функцию trUtf8(), она преобразует строку из UTF-8 во внутреннее представление Qt (QString использует UTF-16).
недостаток:
строки помещённые в trUtf8 будут попадать в перевод, а иногда это не удобно.

Способ по сложнее (писанины больше):
1) Кодировка исходника - "Х"
2)
 QTextCodec *codec = QTextCodec::codecForName(Х); // Создаём кодек для кодировки "Х"

// Далее в коде используем
QString string = codec->toUnicode(" - Начато формирование технологических отчетов");
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Borodeys
  опции профиля:
сообщение 14.6.2011, 13:01
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 23
Регистрация: 10.4.2011
Пользователь №: 2588

Спасибо сказали: 0 раз(а)




Репутация:   0  


Настройки QT - Инструменты/параметры/среда/основные.

Использование trUtf8() - удобно, однако, в результате его использования получаем кучу ромбиков со знаком вопроса. Разбираюсь с кодеком.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 14.6.2011, 13:07
Сообщение #5


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Цитата(Borodeys @ 14.6.2011, 13:01) *
Настройки QT - Инструменты/параметры/среда/основные.
Это не то.

Мне всегда хватало:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
В консрукторе QMainWindow.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Borodeys
  опции профиля:
сообщение 14.6.2011, 13:27
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 23
Регистрация: 10.4.2011
Пользователь №: 2588

Спасибо сказали: 0 раз(а)




Репутация:   0  


А как узнать необходимую кодировку, чтобы указать ее в конструкции
QTextCodec::codecForName("X");

UTF-6 и UTF-16 не подходят, опять ромбики. Может где в винде посмотреть нужно? У меня Windows XP SP3.

Научным методом тыка было установлено, что кодировка - windows-1251. Но все же вопрос остается открыт: Как узнать кодировку используемой системы windows/linux. Возможно ли Qt научить самого определять кодировку?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 14.6.2011, 13:29
Сообщение #7


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 1.4.2010
Пользователь №: 1584

Спасибо сказали: 40 раз(а)




Репутация:   6  


В файле main.cpp до вызова конструктора виджета:
QTextCodec *codec=QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);


Для WinXP кажется cp1251 - по умолчанию. Опять же здесь нужно устанавливать такую кодировку, которая стоит у ВАС
Цитата(Borodeys @ 14.6.2011, 16:18) *
Настройки QT - Инструменты/параметры/среда/основные.


Если стоит System - то ставьте в программе cp1251. Я Уже давно на UTF-8 перешел.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Borodeys
  опции профиля:
сообщение 14.6.2011, 13:48
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 23
Регистрация: 10.4.2011
Пользователь №: 2588

Спасибо сказали: 0 раз(а)




Репутация:   0  


А как перейти на UTF-8? Тогда отпадет необходимость в использовании кодека, а как быть при портировании программы на другую машину?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 14.6.2011, 15:10
Сообщение #9


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Цитата(Borodeys @ 14.6.2011, 13:48) *
А как перейти на UTF-8? Тогда отпадет необходимость в использовании кодека, а как быть при портировании программы на другую машину?

Да нет же, там вы задаете кодировку исходников.

В creator'е никак не задать кодирорву проги, это логично.

>>UTF-6 и UTF-16 не подходят, опять ромбики.
кто бы сомневался, их хотя бы кто то использует?


Linux - UTF8
Винда - cp1251 или Windows-1251
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 14.6.2011, 16:17
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(RazrFalcon @ 14.6.2011, 16:07) *
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
А если у тебя База данных в CP-1251 (windows), как будешь разруливать?

Цитата(Borodeys @ 14.6.2011, 16:27) *
Возможно ли Qt научить самого определять кодировку?
НЕТ

Цитата(Borodeys @ 14.6.2011, 16:27) *
А как узнать необходимую кодировку, чтобы указать ее в конструкции
Ты должен знать её сам, любой современный текстовый редактор, а тем более программистский, позволяет задать кодировку. Какая-то из кодировок в нём установлена по умолчанию для новых файлов.
Цитата(Borodeys @ 14.6.2011, 16:27) *
Как узнать кодировку используемой системы windows/linux.
кодировка системы тебе не нужна. (на русском виндовозе в графическом интерфейсе - CP-1251/Windows-1251, а в консоли - OEM866/IBM866)

Цитата(RazrFalcon @ 14.6.2011, 18:10) *
Linux - UTF8
часто, но не всегда. FreeBSD, например, koi-8r
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 12:52