2015-03-23 24 views
29

Obecnie migrujemy projekt z QtWebkit do QWebEngine. Jednak obsługa pobrań powoduje trochę bólu głowy. Wcześniej obsługiwaliśmy to za pomocą sygnału QWebPage::unsupportedContent, tak:Obsługa plików do pobrania w QtWebEngine

QWebPage* webPage = new QWebPage(this); 

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

Podczas korzystania QtWebEngine, jedyne co mogę myśleć jest użycie sygnału QWebEngineView::urlChanged aby żądanie do serwera, a nie jestem nawet pewien, jeśli to zadziała.

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

Oczywiście takie podejście jest bardzo ograniczając tym, że punkty końcowe, w wyniku których do pobrania muszą być zakodowane w aplikacji. Jednak nie widzę lepszego rozwiązania. Czy ktoś wymyślił coś lepszego?

- Update -

Dokumentów z Qt 5.5 Release plan konturów, między innymi ulepszenia kontroli dewelopera nad cache i ciasteczka internetowej, następującej funkcji.

Dodany API do zarządzania pobieraniem plików

5,5 beta ma do wydania na 09/04/2015 i końcowy do wydania na 26/05/2015.

Aby zapobiec dalszym urazom głowy, warto po prostu poczekać na te ulepszenia.

Powiedziawszy to, nadal byłbym zainteresowany czystszym rozwiązaniem niż moje, jeśli ktokolwiek je posiada.

+0

Musieliśmy podjąć podobną decyzję i zdecydowaliśmy się pozostać przy webkicie, dopóki integracja migania nie będzie bardziej kompletna. Brakuje również modyfikacji żądań za pośrednictwem QNetworkManager i nie można jeszcze drukować. Na przykład, jak rozwiązać ten problem z Qt 5.5, zajrzyj do [przeglądarki wydry] (https://github.com/OtterBrowser/otter-browser/blob/master/src/modules/backends/web/qtwebengine/QtWebEngineWebWidget .cpp # L122) i [źródła Qt] (http://code.qt.io/cgit/qt/qtwebengine.git/tree/src/webenginewidgets/api/qwebengineprofile.h#n106). – elsamuko

+0

@StickyCube Czy możesz dać mi znać, w jaki sposób uruchomiłeś webin? Próbuję użyć quicknanobrowser jako ./quicknanobrowser -platform wayland. Ale aplikacja ulega awarii podczas odtwarzania filmów z youtube. Proszę napisać do mnie, jeśli masz jakieś sugestie. –

Odpowiedz

3

QtWebEngine zarządza plikami do pobrania za pośrednictwem klasy QWebEngineProfile z sygnałem downloadRequested.