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