在QtWebEngine中处理下载

Sti*_*ube 30 c++ qt qt5.4 qtwebengine

我们目前正在将项目从一个项目迁移QtWebkitQWebEngine.但是,处理下载会引起一些麻烦.以前我们使用QWebPage::unsupportedContent信号处理这个,如下所示:

QWebPage* webPage = new QWebPage(this);

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

使用时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();
    }
})
Run Code Online (Sandbox Code Playgroud)

显然,这种方法非常有限,因为导致下载的端点必须硬编码到应用程序中.但是,我看不出更好的解决方案.谁有人想出更好的东西?

- 更新 -

Qt的5.5发布计划中的文档概述了开发人员对Web缓存和cookie的控制的其他改进,以下功能.

添加了用于管理文件下载的API

5.5 beta计划于2015年4月9日发布,最终发布于2015年5月26日.

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

话虽如此,如果有人的话,我仍然会对我的清洁解决方案感兴趣.

Xia*_*Nox 5

QtWebEngine通过QWebEngineProfile类使用downloadRequested信号管理下载。