2012-03-27 9 views
1

QNetworkReplyをQString/QByteArrayに保存したいと考えています。私が見た例では、彼らは常にストリームを別のファイルに保存しています。Save 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

+0

より具体的には、それは「読み取り一度しかやりません」という結果をもたらすシーケンシャルアクセス「QIODevice」です。 [QNetworkReply](http://qt-project.org/doc/qt-5/qnetworkreply.html)の詳細な説明を読むことができます。 –