31

我们目前正在将一个项目QtWebkitQWebEngine. 但是,处理下载会让人有些头疼。以前我们使用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 发布计划中的文档概述了开发人员对 Web 缓存和 cookie 控制的其他改进,以及以下功能。

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

5.5 测试版计划于 2015 年 9 月 4 日发布,最终版将于 2015 年 5 月 26 日发布。

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

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

4

1 回答 1

6

QtWebEngine 通过带有downloadRequested信号的 QWebEngineProfile 类管理下载。

于 2015-07-31T13:40:35.257 回答