【问题标题】:Save QNetworkReply保存 QNetworkReply
【发布时间】:2012-03-28 04:42:48
【问题描述】:

我希望能够将 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>

那么我怎样才能将这个小流加载到内存中,或者只是查找错误代码?

【问题讨论】:

    标签: c++ xml regex qt qnetworkaccessmanager


    【解决方案1】:

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

    【讨论】:

    • 更具体地说,它是一个顺序访问QIODevice,这会导致“读取一次,然后它就消失”的行为。您可以在QNetworkReply的详细说明中阅读更多内容。
    猜你喜欢
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多