c++ - Manejo de descargas en QtWebEngine
qt5.4 (1)
QtWebEngine gestiona las descargas a través de la clase QWebEngineProfile con la señal downloadRequested .
Actualmente estamos migrando un proyecto de QtWebkit
a QWebEngine
. Sin embargo, el manejo de descargas está causando un poco de dolor de cabeza. Anteriormente, lo manejamos usando la señal QWebPage::unsupportedContent
, así:
QWebPage* webPage = new QWebPage(this);
QObject::connect(webPage, &QWebPage::unsupportedContent, [] (QNetworkReply* reply) {
// do stuff with the reply
reply->readAll();
});
Cuando uso QtWebEngine
, lo único que se me ocurre es usar la señal QWebEngineView::urlChanged
para hacer una solicitud al servidor y ni siquiera estoy seguro de si eso funcionará.
QNetworkAccessManager* accessManager = new QNetworkAccessManager(this);
QWebEngineView* webView = new QWebEngineView(this);
QObject::connect(webView, &QWebEngineView::urlChanged, [=] (const QUrl& url) {
if (url.path().endsWith("some_endpoint_which_results_in_a_download") {
QNetworkReply* reply = accessManager->get(url);
// do the same stuff to the reply
reply->readAll();
}
})
Obviamente, este enfoque es muy limitante ya que los puntos finales que resultan en una descarga deben estar codificados en la aplicación. Sin embargo, no puedo ver una mejor solución. ¿Alguien ha encontrado algo mejor?
- Actualización -
El plan de publicación Docs from Qt''s 5.5 describe, entre otras mejoras para el control del desarrollador sobre el caché web y las cookies, la siguiente característica.
API agregada para administrar la descarga de archivos
5.5 beta está previsto para el lanzamiento el 04/09/2015 y la final para el lanzamiento el 26/05/2015.
Para evitar cualquier trauma en la cabeza, puede valer la pena esperar estas mejoras.
Habiendo dicho eso, aún estaría interesado en una solución más limpia que la mía si alguien tiene una.