Подтвердить что ты не робот

Обработка загрузок в 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();
    }
})

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

- Обновление -

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

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

5.5 beta предназначено для выпуска 09/04/2015, а финальный релиз - 26/05/2015.

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

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

4b9b3361

Ответ 1

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