2012-03-27 17 views
1

我希望能够将QNetworkReply保存为QString/QByteArray。在我见过的例子中,他们总是将流保存到另一个文件中。保存QNetworkReply

目前我的代码看起来像这样,我从主机获得一个字符串,我想要做的就是解析它以查找指定的错误代码。

if(_reply->error() == QNetworkReply::UnknownContentError) { 

    qDebug() << _reply->readAll(); // prints out the xml message 

    QString test = QString(_reply->readAll()); 
    qDebug() << test; // "" 

    QByteArray test2 = QByteArray(_reply->readAll()); 
    qDebug() << test2; // "" 

    QRegExp rxlen("(<code>)(.*(?=</code>))"); 
    rxlen.setMinimal(true); 

    int pos = rxlen.indexIn(test); // pos == -1 

    if(pos > -1) { 
     qDebug() << rxlen.cap(2); // never hit 
    } 

} 

的信息是非常小,看起来是这样的:

<?xml version="1.0" encoding="utf-8"?> 
    <error> 
     <code>string-value</code> 
     <message>string-value</message> 
    </error> 

因此,如何能我这个小流加载到内存中,或只是寻找错误代码?

回答

3

QNetworkReply继承自QIODevice这是一个流。从流中读取某些内容后,它不再存在。在您的调试线(// prints out the xml message评论之一)之后,没有什么可读的了。

+0

你在哪里这么快,我甚至不能接受你的答案:) – chikuba 2012-03-27 20:49:58

+0

更具体地说,它是一个顺序访问'QIODevice',导致“一次读取,然后它不见了”的行为。您可以在[QNetworkReply]的详细说明(http://qt-project.org/doc/qt-5/qnetworkreply.html)中阅读更多内容。 – 2014-02-02 23:28:32