[devel] Странности с QT

Hihin Ruslan ruslandh на gmail.com
Чт Ноя 3 07:32:53 UTC 2011


Здравствуйте Paul Wolneykien
  В сообщении от 3 ноября 2011 Paul Wolneykien написал(a):
>  Я имел в виду, что пробел вставляется в дополнение к байту из
> исходной строки in. Это нормально?
Я так понимаю, что ошибка где-то раньше - в том, что туда попали 
пробелы.
Не могу гарантировать, но IMHO - это нормально.

Как я понимаю, пробелы возникли из-за чего-то, связанного с 
уникодом. Насколько я помню, QT хранит данные в юникоде (и даже 
не utf8. а в чём-что ещё). И сколько занимает один символ - не 
определено (зависит от языка и т.п.). 

Теперь полез по справочникам:

Функция at вытаскивает символ типа QChar по индексу. 
Вот - описание QCcar:
"The QChar class provides a 16-bit Unicode character.
In Qt, Unicode characters are 16-bit entities without any markup 
or structure. This class represents such an entity. It is 
lightweight, so it can be used everywhere. Most compilers treat 
it like a unsigned short."

Т.е. один QChar занимает 2 байта. 


QByteArray bb(4, ' '); - отводит 4 байта (не символа).  IMHo 
отсюда и проблема. 16-битный символ пытаются запихнуть в один 
байт. 

Т.е. должно быть что-то типа:
   QByteArray bb(8, ' ');
       bb = bb.insert(6, in.at(0));
       bb = bb.insert(4, in.at(1));
       bb = bb.insert(2, in.at(2));
       bb = bb.insert(0, in.at(3));

Начсколько это верно, зависит от операции = (как приводятся типы 
и т.п.)

Или
QChar bb[4]
bb = in.at(0);
....
bb = in.at(3));

Я конечно могу ошибаться, но ошибка возникает из-за представления 
программиста, что символ занимает один байт.


-- 
  А ещё говорят так  (fortune):
 
The trouble with you Is the trouble with me. Got two good eyes 
But we still don't see. -- Robert Hunter, "Workingman's Dead" 
________________________________________________________________________
С уважением Хихин Руслан
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : отсутствует
Тип     : application/pgp-signature
Размер  : 198 байтов
Описание: This is a digitally signed message part.
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20111103/b4036f4d/attachment.bin>


Подробная информация о списке рассылки Devel