Russian Qt Forum

Qt => Общие вопросы => Тема начата: VAP от Август 05, 2010, 13:35



Название: Проблема при записи и считывании данных используя QBuffer и QDataStream
Отправлено: VAP от Август 05, 2010, 13:35
Добрый день. Для приведения данных к своему типу (нужно получить QList<T>) использую QBuffer и QDataStream. Записываю/читаю:
Код:
     //запись
     QByteArray byteArray;
     QBuffer buffer(&byteArray);
     buffer.open(QIODevice::ReadWrite);
     QDataStream out(&buffer);
     ......
     QString str1;
     out << str1
     ......
     QString str2;
     out << str2; и т.д.

     //чтение
     QList<T> myTypeList;
     QDataStream in(&buffer);
   
     while (!buffer.atEnd()) {
              in >> myTypeList;
     }


Но list остается пуст. Что делаю не так, помогите разобраться.


Название: Re: Проблема при записи и считывании данных используя QBuffer и QDataStream
Отправлено: Amigo_sa от Август 05, 2010, 15:59
Добрый день. Для приведения данных к своему типу (нужно получить QList<T>) использую QBuffer и QDataStream. Но list остается пуст. Что делаю не так, помогите разобраться.
Продебажил ваш код, у вас просто ни разу в цикл while не заходит. Нужно сделать buffer.seek(0); тогда в списке (у меня QList<QString>) восстанавливаются 2 элемента, только пустые)

P.S. Еще я бы поменял местами имена ваших потоков in и out :)


Название: Re: Проблема при записи и считывании данных используя QBuffer и QDataStream
Отправлено: Mikhail от Август 05, 2010, 18:36
После записи в буфер, у вас указаель стои в его конце. Поэтому отсутствует вхождение в цикл.
Попробуйте изменить положение pos() применив QBuffer::seek( 0 );


Название: Re: Проблема при записи и считывании данных используя QBuffer и QDataStream
Отправлено: VAP от Август 05, 2010, 20:07
Спасибо за подсказки, но пока не помогло, будем разбираться :)


Название: Re: Проблема при записи и считывании данных используя QBuffer и QDataStream
Отправлено: Waryable от Август 18, 2010, 12:14
Есть предположение, что вы всетаки инициализируете как-нибудь  переменные str1 и str2 перед операциями: out << str1 и out << str2. Иначе трудно надеяться на то, что операция in >> myTypeList хоть что нибудь извлечет из пустого потока.