2010-12-17 17 views
5

我使用QWebPage下载网页及其所有资源。同时我想在这个过程中获得Qt下载的原始数据。通过从QNetworkReply中读取void QNetworkAccessManager::finished(QNetworkReply * reply) 信息来做到这一点,信号不是一个好的解决方案,因为数据本身可能已被QWebPage读取。这是因为如何从QWebPage使用QNetworkReply读取数据?

QNetworkReply是一个顺序访问 QIODevice中,这意味着一旦数据 从对象中读取,它不再保持 由设备。

根据detailed descriptionQNetworkReply

然而QWebPage可以配置为使用自定义QNetworkAccessManager与被覆盖的createRequest方法

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

我认为正确的解决方案是创建一个代理QNetworkReply并在createRequest方法返回。该代理应允许从原始QNetworkReply(以便QWebPage可以从中读取数据)的情况读取回复数据,但同时该代理应该允许其他对象在通过QWebPage读取数据后读取数据。换句话说,我们需要teeQNetworkReplyIODevice基类。

如何编写此代理?

回答

4

它看起来像有人已经想要相同,并写了a proxy for the QNetworkReply

+0

嗨Piotr,你知道代理是否仍然可用吗?该链接似乎被破坏。 – izyda 2015-08-21 05:13:19

+1

@izyda它看起来像链接暂时不可用 - *存储库很快就可用于只读访问,保留原始克隆URL。* – 2015-08-21 15:37:20

+0

明白了。在旁注中,您是否发现子类化QtNetworkResponse比使用peek()更好? – izyda 2015-08-21 16:39:51