qtextstream弄乱了其位置指针

QTextStream messing its position pointer

本文关键字:位置 指针 乱了 qtextstream      更新时间:2023-10-16

我正在为文本文件编写解析器,但是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() 有几个常规错误。其中许多是" 未解决的"或" 不会修复",他们的复制器案例看起来完全像您的问题。

我建议避免依靠该功能(加上QTEXTStream的文档:

由于qtextstream被缓冲,因此此功能可能必须寻求设备以重建有效的设备位置。

它在循环过程中也会使事情变慢)。

也可以在此处找到更多有关此的信息