2015-03-23 12 views
29

Attualmente stiamo migrando un progetto da QtWebkit a QWebEngine. Tuttavia, la gestione dei download sta causando un po 'di mal di testa. In precedenza abbiamo gestito questo utilizzando il segnale QWebPage::unsupportedContent, in questo modo:Gestione download in QtWebEngine

QWebPage* webPage = new QWebPage(this); 

QObject::connect(webPage, &QWebPage::unsupportedContent, [] (QNetworkReply* reply) { 
    // do stuff with the reply 
    reply->readAll(); 
}); 

Quando si utilizza QtWebEngine, l'unica cosa che mi viene in mente è quello di utilizzare il segnale QWebEngineView::urlChanged di fare una richiesta al server e non sono nemmeno sicuro se questo funzionerà

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(); 
    } 
}) 

Ovviamente questo approccio è molto limitante dal fatto che i punti finali che comportano un download devono essere codificate nell'applicazione. Tuttavia, non riesco a vedere una soluzione migliore. Qualcuno ha inventato qualcosa di meglio?

- Aggiornamento -

la documentazione da 5.5 Release plan contorni di Qt, tra gli altri miglioramenti per il controllo dello sviluppatore sul web cache e cookie, la seguente funzione.

Aggiunto API per la gestione di download di file

5,5 beta è destinato per il rilascio il 2015/09/04 e la finale per il rilascio il 26/05/2015.

Per evitare ulteriori traumi cranici, potrebbe valere la pena di aspettare questi miglioramenti.

Detto questo, sarei ancora interessato a una soluzione più pulita della mia se qualcuno ne ha uno.

+0

Abbiamo dovuto prendere una decisione simile e abbiamo scelto di rimanere con il webkit fino a quando l'integrazione dei blink non è stata completata. Manca anche la modifica della richiesta tramite QNetworkManager e non è ancora stata eseguita la stampa. Per un esempio su come risolvere questo problema con Qt 5.5, dare un'occhiata al [browser lontra] (https://github.com/OtterBrowser/otter-browser/blob/master/src/modules/backends/web/qtwebengine/QtWebEngineWebWidget .cpp # L122) e le [fonti Qt] (http://code.qt.io/cgit/qt/qtwebengine.git/tree/src/webenginewidgets/api/qwebengineprofile.h#n106). – elsamuko

+0

@StickyCube Per favore fatemi sapere come avete lanciato il motore di ricerca? Sto cercando di usare quicknanobrowser come ./quicknanobrowser - wayland piatto. Ma l'app si arresta in modo anomalo durante la riproduzione dei video di YouTube. Per favore, scrivimi se hai qualche suggerimento. –

risposta

3

QtWebEngine gestisce i download tramite la classe QWebEngineProfile con il segnale downloadRequested.