2010-12-17 7 views
5

Uso QWebPage para descargar una página web y todos sus recursos. Al mismo tiempo, me gustaría obtener datos sin procesar que Qt está descargando durante este proceso. Hacer esto leyendo 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 leídos por QWebPage. Esto se debe a¿Cómo leer los datos de QNetworkReply utilizados por QWebPage?

QNetworkReply es un secuencial de acceso QIODevice, lo que significa que una vez que los datos se lee desde el objeto, ya no mantiene por el dispositivo.

según detailed description de QNetworkReply.

Sin embargo QWebPage puede ser configurado para utilizar encargo 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 debería permitir la lectura de datos de respuesta como en el caso del QNetworkReply original (para que QWebPage pudiera leer datos del mismo) pero al mismo tiempo este proxy debería permitir leer datos de otros objetos después de haber sido leídos por QWebPage. En otras palabras, necesitamos tee para la clase base QNetworkReplyIODevice.

¿Cómo escribir este proxy?

Respuesta

4

Parece que alguien ya ha querido lo mismo y escribió a proxy for the QNetworkReply.

+0

Hola Piotr, ¿sabes si el proxy todavía está disponible en alguna parte? El enlace parece estar roto. – izyda

+1

@izyda Parece que el enlace está temporalmente no disponible - * Los repositorios pronto estarán disponibles para acceso de solo lectura, con las URL de clonación originales conservadas. * –

+0

Lo tengo. En una nota lateral, ¿descubrió que la subclasificación de QtNetworkResponse es una mejor opción que el uso de peek()? – izyda

Cuestiones relacionadas