Russian Qt Forum

Qt => Общие вопросы => Тема начата: andrew.k от Июль 07, 2010, 10:40



Название: QByteArray + QDataStream (решено)
Отправлено: andrew.k от Июль 07, 2010, 10:40
Мне не совсем понятно поведение приведенного ниже кода:
QByteArray ba;
QDataStream ds( &ba, QIODevice::WriteOnly );
QList<QVariant> l;

l.append( 1342345 );
l.append( "string" );
l.append( 14.2345 );

ds << l;
ba.clear();

ds << l;
После вызова ba.clear(), я ожидаю, что массив будет очищен и добавление начнется заново. Он и действительно очищается, но при повторной записи в поток, там появляются лишние данные, которых я не ожидаю.
Интуитивно понимаю, что это видимо из-за внутреннего устройства QDataStream, который создает внутренний буффер и производит запись через него.
Но как быть, если я действительно хочу очистить ba и начать писать в него заново?
Можно конечно создавать QDataStream внутри блока, но это не универсальный выход. Должен быть какой-то аналог QFile::close() я так понимаю. Не создавать же QDataStream динамически?
Подскажите.


Название: Re: QByteArray + QDataStream
Отправлено: maxxant от Июль 07, 2010, 11:03
например так:

ds << l;
ds.device()->reset();
ba.clear();

ds << l;

QDataStream пишет через QIODevice, которому просто нужно сдвинуть позицию записи в начало с помощью reset() или seek()


Название: Re: QByteArray + QDataStream
Отправлено: andrew.k от Июль 07, 2010, 13:09
Спасибо!