Qt QXMLStreamreader从慢速QProcess读取
在Qt5.1中,我遇到了QXMLStreamReader等待QProcess生成更多数据的问题 如果我从一个无缓冲的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
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())
{
...
}