我正在为文本文件编写解析器,但是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内部指针是可以的,但是在循环内部完全困惑了。

对这里发生的事情有任何想法吗?

最佳答案

关于下的IO设备使用QTextStream::pos() several standing bugs。他们中的许多人都是“未解决”或“无法解决”的,其复制器的情况与您的问题完全相同。

我建议避免依赖该功能(另外,从QTextStream的文档中引用:



也会使您的循环过程变慢)。

对此也可以找到更多信息here

关于c++ - QTextStream弄乱了它的位置指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30327496/

10-11 18:34