C++ QTextStream弄乱了它的位置指针

C++ QTextStream弄乱了它的位置指针,c++,qt,qtextstream,C++,Qt,Qtextstream,我正在为文本文件编写解析器,但QTextStream似乎缺少一些东西。我使用的是Qt5.4.1,如果有必要的话,代码是单线程的 方法如下: const Event* AviLogFile::nextEvent() { qDebug() << "Entering nextEvent()"; qDebug()

我正在为文本文件编写解析器,但QTextStream似乎缺少一些东西。我使用的是Qt5.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;                                                                  
}
正如您所看到的,QTextStream和QFile内部指针在进入循环之前是正常的,但是在循环中完全混乱了

你知道这里发生了什么吗?

关于使用
QTextStream::pos()
,在下面有一个IO设备。他们中的许多人“无法解决”或“无法修复”,他们的复制机案例与您的问题一模一样

我建议避免依赖该功能(另外,引用以下文件:

由于QTextStream是缓冲的,因此此函数可能必须查找设备以重建有效的设备位置

在循环过程中,它也会使事情变得缓慢)


有关这方面的更多信息,请访问

@MarcoA。我想你是对的。我已将代码更改为较低级别的QFile::readLine(),并完全避免使用QTextStream来修复该问题。请把它作为答案贴出来,我会接受的
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