如何从 QWebPage 使用的 QNetworkReply 读取数据?
Posted
技术标签:
【中文标题】如何从 QWebPage 使用的 QNetworkReply 读取数据?【英文标题】:How to read data from QNetworkReply being used by QWebPage? 【发布时间】: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。
这个代理怎么写?
【问题讨论】:
【参考方案1】:看起来有人已经想要同样的东西并写了a proxy for the QNetworkReply。
【讨论】:
嗨 Piotr,您知道代理是否在某处仍然可用?链接似乎已损坏。 @izyda 链接似乎只是暂时不可用 - 存储库很快将可用于只读访问,并保留原始克隆 URL。 知道了。顺便说一句,您是否发现继承 QtNetworkResponse 比使用 peek() 更好?以上是关于如何从 QWebPage 使用的 QNetworkReply 读取数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何使 QWebView/QWebPage 默认为衬线字体?