我们目前正在将一个项目从 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 发布计划 的文档概述了开发人员在Web缓存和cookie控制方面的改进,以及以下功能。
添加管理文件下载的API
5.5 beta计划于2015年9月4日发布,正式版计划于2015年5月26日发布。
为了避免进一步的头部外伤,等待这些改进可能是值得的。
话虽如此,如果有人有比我更干净的解决方案,我仍然很感兴趣。