Обработка загрузок в QtWebEngine

В настоящее время мы переносим проект с QtWebkit на QWebEngine. Однако обработка загрузок вызывает некоторую головную боль. Ранее мы обрабатывали это с помощью сигнала QWebPage::unsupportedContent, например:

QWebPage* webPage = new QWebPage(this);

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

При использовании QtWebEngine единственное, о чем я могу думать, это использовать сигнал QWebEngineView::urlChanged для запроса к серверу, и я даже не уверен, что это сработает.

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

Очевидно, что этот подход очень ограничен тем, что конечные точки, которые приводят к загрузке, должны быть жестко закодированы в приложении. Однако лучшего решения я не вижу. Кто-нибудь придумал что-нибудь лучше?

-- Обновлять --

Документы из плана выпуска 5.5 Qt описывают, среди прочих улучшений, контроль над веб-кэшем и файлами cookie, следующая функция.

Добавлен API для управления загрузкой файлов

Бета-версия 5.5 предназначена для выпуска 04.09.2015, а финальная — 26.05.2015.

Чтобы предотвратить дальнейшую травму головы, возможно, стоит просто подождать этих улучшений.

Сказав это, я все равно был бы заинтересован в более чистом решении, чем мое, если у кого-то оно есть.


person StickyCube    schedule 23.03.2015    source источник
comment
Нам пришлось принять аналогичное решение и остаться с webkit до тех пор, пока интеграция с blink не будет завершена. Также отсутствует модификация запроса через QNetworkManager и пока нет печати. В качестве примера того, как решить эту проблему с помощью Qt 5.5, см. .cpp#L122" rel="nofollow noreferrer">выдровый браузер и исходники Qt.   -  person elsamuko    schedule 26.06.2015
comment
@StickyCube Не могли бы вы сообщить мне, как вы запустили веб-движок? Я пытаюсь использовать quicknanobrowser как ./quicknanobrowser -platform wayland. Но приложение вылетает при воспроизведении видео на ютубе. Пожалуйста, напишите мне, если у вас есть какие-либо предложения.   -  person surendra nath    schedule 22.09.2017


Ответы (1)


QtWebEngine управляет загрузками через класс QWebEngineProfile с сигналом downloadRequested.

person Xian Nox    schedule 31.07.2015