处理QtWebEngine中的下载

31

我们目前正在将一个项目从 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日发布。

为了避免进一步的头部外伤,等待这些改进可能是值得的。

话虽如此,如果有人有比我更干净的解决方案,我仍然很感兴趣。


我们不得不做出类似的决定,并选择在blink集成更完整之前继续使用webkit。此外,通过QNetworkManager进行请求修改还存在问题,而且还没有打印功能。如果想了解如何在Qt 5.5中解决这个问题,请参考otter浏览器Qt源代码 - elsamuko
@StickyCube,你能告诉我你是如何启动Web引擎的吗?我正在尝试使用quicknanobrowser,作为./quicknanobrowser -platform wayland。但是,当播放YouTube视频时,应用程序会崩溃。如果你有任何建议,请告诉我。 - surendra nath
1个回答

7

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接