Распределение QDataStream между членами

class ReadFile {
  public:
    void init();
    QList<double> getData();
  private:
    QFile file;
    QDataStream read;
    double bufferFloat;
    quint32 bufferInteger
}

Теперь идея состоит в том, что при вызове init() файл должен быть открыт и перемещен в место, где начинаются данные. Теперь каждый раз, когда вызывается getData(), часть байтов должна считываться из файла.

Псевдокод выглядит так:

void ReadFile::init()
{
  file.setFileName("...");
  file.open(QIODevice::ReadOnly);
  QDataStream read(&file);

  // This chunk does some magic to find correct location by applying
  // a readout (read >> bufferInteger) and check the result

  // I can verify that at this point, if doing a readout (read >> bufferFloat)
  // I get good data (i.e. corresponding to the file).
}

а также

QList<double> ReadFile::getData()
{
  // Doing a (read >> bufferFloat) at this point will result in zeros.
}

Я понимаю, почему это происходит, поскольку read в init объявляется локально. Но как мне распределить поток данных, чтобы getData мог продолжить с того места, где остановился init? И следующий getData может продолжиться с того места, где остановился предыдущий. Последовательность вызова будет выглядеть так:

ReadFile file();
file.init();
file.readData();
file.readData();
file.readData();
file.readData();
//etc...

person casparjespersen    schedule 02.06.2015    source источник
comment
Сделайте QFile членом класса.   -  person Amartel    schedule 02.06.2015
comment
@Amartel Пожалуйста, взгляните на обновленный код. Я поставил файл QFile в качестве члена, но это не помогает делу.   -  person casparjespersen    schedule 02.06.2015


Ответы (1)


В вашем коде ошибка. Эта строка:

QDataStream read(&file);

определяет локальную переменную, которая переопределяет член класса. Вместо этого вы должны сделать это:

read.setDevice(&file);
person Amartel    schedule 02.06.2015
comment
Это делает это. Я искал метод .setFile, но не понял, что QFile унаследован от QIODevice. Спасибо :-) - person casparjespersen; 04.06.2015