我用 QWebPage 下载网页以及所有资源。同时,我想保留在此过程中QT下载的原始数据。通过阅读数据来做到这一点 QNetworkReplyvoid QNetworkAccessManager::finished(QNetworkReply * reply)信号不是一个好的解决方案,因为数据本可以通过 QWebPage 本身。这是因为

Qnetworkreply是一个顺序访问QIODEVICE,这意味着一旦从对象读取数据,设备就不再保留。

根据 详细说明QNetworkReply.

然而 QWebPage 可以配置为使用自定义 QNetworkAccessManager 与Overriden createRequest 方法

QNetworkReply * QNetworkAccessManager::createRequest ( Operation op, const QNetworkRequest & req, QIODevice * outgoingData = 0 )

我认为正确的解决方案是创建一个代理 QNetworkReply 并将其归还 createRequest 方法。此代理应允许从回复中读取数据,就像原始的情况一样 QNetworkReply (以便 QWebPage 可以从中读取数据),但与此同时,该代理应允许其他对象读取数据的数据 QWebPage. 。换句话说,我们需要 球座 为了 QNetworkReply' IODevice 基类。

如何写这个代理?

有帮助吗?

解决方案

看来有人已经想要同样的东西并写了 Qnetworkreply的代理.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top