Cómo leer datos de QNetworkReply siendo utilizados por QWebPage?
-
11-10-2019 - |
Pregunta
QWebPage
para descargar una página web, así como todos sus recursos. Al mismo tiempo, me gustaría conseguir el asimiento de los datos en bruto que había sido descargado por Qt durante este proceso. Hacer esto mediante la lectura de los datos de QNetworkReply
en void QNetworkAccessManager::finished(QNetworkReply * reply)
señal no es una buena solución ya que los datos podrían haber sido ya leído por QWebPage
sí. Esto se debe a
QNetworkReply es una secuencia de acceso QIODevice, lo que significa que una vez que los datos se lee desde el objeto, ya no mantenido por el dispositivo.
según Descripción detallada de QNetworkReply
.
Sin embargo QWebPage
se puede configurar para su uso a medida QNetworkAccessManager
con overriden createRequest
método
QNetworkReply * QNetworkAccessManager::createRequest ( Operation op, const QNetworkRequest & req, QIODevice * outgoingData = 0 )
Creo que la mejor solución sería crear un proxy para QNetworkReply
y devolverlo en el método createRequest
. Este proxy debe permitir la lectura de datos de respuesta como es el caso de la QNetworkReply
originales (de modo que QWebPage
podía leer datos de él), pero al mismo tiempo este proxy debe permitir la lectura de los datos por parte de otros objetos después de haber sido leído por QWebPage
. En otras palabras, necesitamos camiseta de clase base QNetworkReply
de IODevice
.
Cómo escribir este proxy?
Solución
Parece que alguien ya ha querido la misma y escribió un proxy para el QNetworkReply .