2012-06-21 2 views
1

QNetworkAccessManager를 사용하여 QWebView에서 응답 데이터를 읽으려고합니다. QT QWebView의 QNetworkAccessManager에서 데이터 읽기

내가 여기에있는 응답의 instrunction 다음 :

ui->explorer->page()->setNetworkAccessManager(new myNetworkAccessManager()); 

그런 다음 나는 createRequest 기능을 무시하고 시도 : how to get response in QtWebKit

나는 QNetworkAccessManager를 서브 클래 싱을 한 후 내 클래스를 사용하도록 QWebView 설정 데이터를 읽으려면 :

#include "mynetworkaccessmanager.h" 
myNetworkAccessManager::myNetworkAccessManager(QObject *parent) : 
    QNetworkAccessManager(parent) 
{ 
} 
QNetworkReply *myNetworkAccessManager::createRequest (Operation op, const QNetworkRequest & req, QIODevice * outgoingData){ 
    QNetworkReply *reply = QNetworkAccessManager::createRequest(op, req, outgoingData); 
    qDebug() << reply->readAll(); 
    return reply; 
} 

아직 데이터가 없습니다. 내가 뭘 잘못 했니?

답변

2

QNetworkAccessManager 및 QNetworkReply는 비동기 IO 클래스 인 A.K.A 논 블로킹 IO이므로 QNetworkReply가 요청 가져 오기/완료를 기다리지 않고 createRequest()가 즉시 반환 함을 의미합니다. 따라서 즉시 읽으면 거의 확실한 기회가 될 것입니다.

당신이해야 할 일은 QNetworkReply의 readyread() 신호를 연결하는 것입니다.이 신호는 데이터 준비가 완료된 후에 나옵니다. 자세한 내용은 the docs

편집 읽기 : 아, 그리고 한 가지 더, the question you linked 대신 당신이 QIODevices이 후 모든 시스템 리소스를 제거 (읽어 후 QWebView가 데이터를 수신하지 않습니다 때문에 READALL()로) 슬쩍 (사용합니까 대답으로 하나 읽음)