【发布时间】:2010-12-17 23:27:40
【问题描述】:
我使用QWebPage 下载网页及其所有资源。同时,我想掌握 Qt 在此过程中下载的原始数据。通过在void QNetworkAccessManager::finished(QNetworkReply * reply) 中读取来自QNetworkReply 的数据来做到这一点
信号不是一个好的解决方案,因为QWebPage 本身可能已经读取了数据。这是因为
QNetworkReply 是顺序访问 QIODevice,表示一旦数据 从对象中读取,它不再 由设备保存。
根据detailed description 的QNetworkReply。
但是 QWebPage 可以配置为使用自定义 QNetworkAccessManager 并覆盖 createRequest 方法
QNetworkReply * QNetworkAccessManager::createRequest ( Operation op, const QNetworkRequest & req, QIODevice * outgoingData = 0 )
我认为正确的解决方案是为QNetworkReply 创建一个代理并在createRequest 方法中返回它。此代理应允许从回复中读取数据,就像原始 QNetworkReply 的情况一样(以便 QWebPage 可以从中读取数据),但同时此代理应允许在其他对象读取数据之后阅读QWebPage。换句话说,对于QNetworkReply 的IODevice 基类,我们需要tee。
这个代理怎么写?
【问题讨论】:
标签: qt tee qnetworkaccessmanager qwebkit qwebpage