【问题标题】:How to read data from QNetworkReply being used by QWebPage?如何从 QWebPage 使用的 QNetworkReply 读取数据?
【发布时间】:2010-12-17 23:27:40
【问题描述】:

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

QNetworkReply 是顺序访问 QIODevice,表示一旦数据 从对象中读取,它不再 由设备保存。

根据detailed descriptionQNetworkReply

但是 QWebPage 可以配置为使用自定义 QNetworkAccessManager 并覆盖 createRequest 方法

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

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

这个代理怎么写?

【问题讨论】:

    标签: qt tee qnetworkaccessmanager qwebkit qwebpage


    【解决方案1】:

    看起来有人已经想要同样的东西并写了a proxy for the QNetworkReply

    【讨论】:

    • 嗨 Piotr,您知道代理是否在某处仍然可用?链接似乎已损坏。
    • @izyda 链接似乎只是暂时不可用 - 存储库很快将可用于只读访问,并保留原始克隆 URL。
    • 知道了。顺便说一句,您是否发现继承 QtNetworkResponse 比使用 peek() 更好?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 2018-06-03
    • 2014-03-26
    相关资源
    最近更新 更多