Come leggere i dati da QNetworkReply utilizzati da QWebPage?
-
11-10-2019 - |
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?
Soluzione
Sembra che qualcuno ha già voluto lo stesso e scrisse un proxy per il QNetworkReply .