我QWebPage
用来下载网页及其所有资源。同时,我想掌握 Qt 在此过程中下载的原始数据。QNetworkReply
通过从in信号中读取数据来做到这void QNetworkAccessManager::finished(QNetworkReply * reply)
一点并不是一个好的解决方案,因为数据本身可能已经被读取QWebPage
。这是因为
QNetworkReply 是一个顺序访问的 QIODevice,这意味着一旦从对象中读取数据,它就不再由设备保存。
根据详细QNetworkReply
描述。
但是QWebPage
可以配置为使用QNetworkAccessManager
带有覆盖createRequest
方法的自定义
QNetworkReply * QNetworkAccessManager::createRequest ( Operation op, const QNetworkRequest & req, QIODevice * outgoingData = 0 )
我认为正确的解决方案是创建一个代理并在方法QNetworkReply
中返回它。createRequest
该代理应该允许从回复中读取数据,就像原始的情况一样QNetworkReply
(以便QWebPage
可以从中读取数据),但同时该代理应该允许在其他对象读取数据后读取数据QWebPage
。换句话说,我们需要tee作为QNetworkReply
基IODevice
类。
这个代理怎么写?