我正在为文本文件编写解析器,但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内部指针在进入循环之前是正常的,但在循环内完全混乱。
对这里发生的事情有任何想法吗?
答案 0 :(得分:1)
QTextStream::pos()
关于将<{1}} 与下的IO设备一起使用有several standing bugs。他们中的许多人都是&#34; 未解决的&#34;或&#34; 不会修复&#34;他们的复制案例看起来就像你的问题一样。
我建议避免依赖该功能(另外,引用QTextStream的文档:
因为QTextStream是缓冲的,所以此功能可能必须寻找设备来重建有效的设备位置。
在循环过程中它也会使事情变慢。
有关此问题的更多信息,请访问here