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.
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
@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. –