Qt QXMLStreamreader从慢速QProcess读取

Qt QXMLStreamreader从慢速QProcess读取,qt,qxmlstreamreader,Qt,Qxmlstreamreader,在Qt5.1中,我遇到了QXMLStreamReader等待QProcess生成更多数据的问题 如果我从一个无缓冲的QProcess中读取行,它可以正常工作: while(!vupProcess.state() == QProcess::NotRunning) { if (vupProcess.atEnd()) { vupProcess.waitForReadyRead(); } qDebug() << vupProcess.readL

在Qt5.1中,我遇到了QXMLStreamReader等待QProcess生成更多数据的问题

如果我从一个无缓冲的QProcess中读取行,它可以正常工作:

while(!vupProcess.state() == QProcess::NotRunning)
{
    if (vupProcess.atEnd())
    {
        vupProcess.waitForReadyRead();
    }
    qDebug() << vupProcess.readLine();
}
但我似乎找不到一个API调用来为我实现这一点


那么,在不必要的情况下,我如何不等待更多的数据呢?

我想我解决了这个问题。没有方法询问是否有更多的XML元素,但是调用
readNext()
会将
QXMLStreamReader
对象置于您可以检测到的状态,并用于让后端设备等待:

QXmlStreamReader::TokenType tokenType = xml.readNext();

while (xml.error() == QXmlStreamReader::PrematureEndOfDocumentError)
{
    xml.device()->waitForReadyRead(XML_READNEXT_TIMEOUT);
    tokenType = xml.readNext();
}

if (xml.hasError())
{
    ...
}
if (xml.device()->atEnd() && !xml.hasMoreElements())
{
    xml.device()->waitForReadyRead(XML_READNEXT_TIMEOUT);
}
QXmlStreamReader::TokenType tokenType = xml.readNext();

while (xml.error() == QXmlStreamReader::PrematureEndOfDocumentError)
{
    xml.device()->waitForReadyRead(XML_READNEXT_TIMEOUT);
    tokenType = xml.readNext();
}

if (xml.hasError())
{
    ...
}