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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QByteArray + QDataStream (решено)  (Прочитано 9989 раз)
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 динамически?
Подскажите.
« Последнее редактирование: Июль 07, 2010, 13:11 от andrew.k » Записан
maxxant
Гость
« Ответ #1 : Июль 07, 2010, 11:03 »

например так:

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

ds << l;

QDataStream пишет через QIODevice, которому просто нужно сдвинуть позицию записи в начало с помощью reset() или seek()
Записан
andrew.k
Гость
« Ответ #2 : Июль 07, 2010, 13:09 »

Спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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