2012-03-27 5 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

+0

더 구체적으로 말하자면, 그것은 순차적 접근 QIODevice이고 결과는 "한 번 읽은 다음에 사라집니다"행동입니다 . 자세한 내용은 [QNetworkReply] (http://qt-project.org/doc/qt-5/qnetworkreply.html)를 참조하십시오. –

관련 문제