Domanda

QWebPage per scaricare una pagina web così come tutte le sue risorse. Allo stesso tempo, mi piacerebbe entrare in possesso dei dati grezzi essere scaricato da Qt durante questo processo. In questo modo tramite la lettura di QNetworkReply in void QNetworkAccessManager::finished(QNetworkReply * reply) segnale non è una buona soluzione come dati potrebbero essere state già letto da QWebPage stessa. Questo perché

QNetworkReply è un accesso sequenziale QIODevice, il che significa che una volta che i dati viene letto dall'oggetto, non è più tenuto dal dispositivo.

secondo descrizione dettagliata di QNetworkReply.

Tuttavia QWebPage può essere configurato per utilizzare QNetworkAccessManager con sovresposta createRequest metodo personalizzato

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

Credo che la soluzione giusta sarebbe quella di creare un proxy per QNetworkReply e restituirlo nel metodo createRequest. Questo proxy deve consentire la lettura dei dati dalla risposta come è il caso con il QNetworkReply originale (in modo che QWebPage in grado di leggere i dati da esso), ma allo stesso tempo questo proxy dovrebbe consentire la lettura dei dati da parte di altri oggetti dopo che sono stati letti da QWebPage. In altre parole, abbiamo bisogno tee per classe di base QNetworkReply di IODevice.

Come scrivere questo proxy?

È stato utile?

Soluzione

Sembra che qualcuno ha già voluto lo stesso e scrisse un proxy per il QNetworkReply .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top