c – 处理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 Release plan的文档概述,以及开发人员对网络缓存和Cookie的控制的其他改进,以下功能。

Added API for managing downloading of files

5.5 beta旨在于09/04/2015发布,最终发布于26/05/2015。

为了防止任何进一步的头部创伤,可能值得等待这些改进。

话虽如此,我仍然有兴趣一个更清洁的解决方案比我的,如果有人有一个。

QtWebEngine通过QWebEngineProfile类与downloadRequested信号管理下载。
http://stackoverflow.com/questions/29212712/handling-downloads-in-qtwebengine

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 处理QtWebEngine中的下载