保存QNetworkReply

时间:2012-03-27 20:34:45

标签: c++ xml regex qt qnetworkaccessmanager

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

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

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>

那么如何将这个小流加载到内存中,或者只是查找错误代码?

1 个答案:

答案 0 :(得分:3)

QNetworkReply继承自QIODevice,这是一个流。从流中读取内容后,它就不再存在了。在你的调试行(// prints out the xml message注释之后)之后,没有什么可读的。