QTextStream портит указатель позиции

Я пишу парсер для текстового файла, но QTextStream, похоже, чего-то не хватает. Я использую Qt 5.4.1, и код однопоточный, если это имеет значение.

Это метод:

const Event* AviLogFile::nextEvent() {
qDebug() << "Entering nextEvent()";
qDebug() << "m_file.pos() before QTextStream: " << m_file.pos();
QTextStream in(&m_file);
qDebug() << "m_file.pos() after QTextStream: " << m_file.pos();
qDebug() << "in.pos(): " << in.pos();
Event* ev = 0;

while (!in.atEnd() && ev == 0) {
QString line = in.readLine();
qDebug() << "(inside loop) m_file.pos(): " << m_file.pos();
qDebug() << "(inside loop) in.pos(): " << in.pos();
ev = parseEvent(line);
}

m_currentEvent = ev;
if (!ev) {
qDebug() << "in.AtEnd: " << in.atEnd() << ". file.atEnd: " << m_file.atEnd();
}
return ev;
}

Я звоню в цикле. Первый вызов работает нормально, но при втором я получаю такой вывод:

Entering nextEvent()
m_file.pos() before QTextStream:  2244
m_file.pos() after QTextStream:  2244
in.pos():  2244
(inside loop) m_file.pos():  18628
(inside loop) in.pos():  65

Как вы можете видеть, внутренние указатели QTextStream и QFile в порядке перед входом в цикл, но полностью перепутаны внутри цикла.

Есть идеи о том, что здесь происходит?

2

Решение

Есть несколько постоянных ошибок относительно использования QTextStream::pos() с устройством ввода-вывода под. Многие из нихнеразрешенный» или же «не исправити их корпус для репродукторов выглядит именно так, как ваша проблема.

Я предлагаю не полагаться на эту функцию (плюс, ссылаясь на документацию QTextStream:

Поскольку QTextStream буферизован, этой функции, возможно, придется искать устройство, чтобы восстановить действительное положение устройства.

это также сделает вещи медленными во время вашего цикла).

Подробнее об этом также можно найти Вот

1

Другие решения


По вопросам рекламы [email protected]