2010-12-17 19 views
5

Ich benutze QWebPage, um eine Webseite sowie alle ihre Ressourcen herunterzuladen. Gleichzeitig möchte ich Rohdaten, die von Qt während dieses Prozesses heruntergeladen werden, in den Griff bekommen. Dies zu tun, indem Daten aus QNetworkReply in void QNetworkAccessManager::finished(QNetworkReply * reply) Signal gelesen wird, ist keine gute Lösung, da Daten bereits von QWebPage selbst gelesen werden konnten. Dies liegt daran,Wie lese ich Daten von QNetworkReply, die von QWebPage verwendet werden?

QNetworkReply ist ein sequenzieller Zugriff QIODevice, was bedeutet, dass, sobald Daten von dem Objekt gelesen wird, es nicht mehr durch die Vorrichtung gehalten wird.

nach detailed description von QNetworkReply.

jedoch QWebPage können benutzerdefinierte verwenden QNetworkAccessManager mit überschriebene createRequest Methode

QNetworkReply * QNetworkAccessManager::createRequest (Operation op, const QNetworkRequest & req, QIODevice * outgoingData = 0) 

Ich denke, die richtige Lösung wäre, erstellen Sie einen Proxy für QNetworkReply und senden Sie es in der createRequest Verfahren konfiguriert werden. Dieser Proxy sollte das Lesen von Daten aus der Antwort ermöglichen, wie es bei dem ursprünglichen QNetworkReply der Fall ist (so dass QWebPage Daten daraus lesen könnte), aber gleichzeitig sollte dieser Proxy das Lesen von Daten durch andere Objekte ermöglichen, nachdem sie von QWebPage gelesen wurden. Mit anderen Worten, wir brauchen tee für QNetworkReply 's IODevice Basisklasse.

Wie schreibe ich diesen Proxy?

Antwort

4

Es sieht so aus, als ob jemand schon das selbe wollte und schrieb a proxy for the QNetworkReply.

+0

Hallo Piotr, weißt du, ob der Proxy irgendwo noch verfügbar ist? Der Link scheint unterbrochen zu sein. – izyda

+1

@izyda Es sieht so aus, als ob der Link nur temporär nicht verfügbar ist - * Die Repositories werden demnächst für den schreibgeschützten Zugriff verfügbar sein, wobei die ursprünglichen Klon-URLs erhalten bleiben. * –

+0

Nebenbei bemerkt, haben Sie herausgefunden, dass QtNetworkResponse als Unterklasse eine bessere Option ist als die Verwendung von peek()? – izyda