【问题标题】:How to set QNetworkReply's content如何设置 QNetworkReply 的内容
【发布时间】:2012-08-13 09:20:22
【问题描述】:

这是我在这里的第一篇文章,我对 Qt 还很陌生。

我正在使用 Qwebkit 来加载网页,并且我对不完全从网络加载一些资源感兴趣。具体来说,我试图只获取 jpg 文件的大小,而不是 jpg 的二进制数据(不是 HTML 标记)中的图像数据。为此,我重新实现了 QNAM 的 createRequest 方法,如下所示:

QNetworkReply *NetworkAccessManager::createRequest(Operation op,const QNetworkRequest & req,QIODevice * outgoingData )
{


    if (req.url().path().endsWith("jpg"))
    {
        CustomReply *reply = new CustomReply(QNetworkAccessManager::createRequest(op, req, outgoingData));
        return reply->getQNR();
    }else{
        return QNetworkAccessManager::createRequest(op, req, outgoingData);
    }
}

然后我在我的 CustomReply 类中连接一些信号以将传入的数据附加到 QByteArray,然后我处理 QByteArray 以查看是否有我正在寻找的 marker。现在在这里我不知道如何进行。在此之后我想做的是关闭连接(不下载更多内容)并使用我通过 CustomReply::getQNR() 收到的数据传递回复。我需要实现一个函数来设置我的回复内容到我存储的 QByteArray,我已经阅读了 thisthat 但无法解决我的问题。

提前谢谢你。

【问题讨论】:

  • 您能否更具体地说明为什么这些链接对您没有帮助?它看起来像原始 QNetworkReply 的代理(如您的第二个链接的答案中所示)是您想要的。您不能将新数据放入现有回复对象中,您需要创建自己的实现并从 createRequest() 返回。要关闭连接,请调用 QNetworkReply::abort()。

标签: c++ qt qwebkit


【解决方案1】:

我不是 100% 清楚您的问题,但如果您尝试将收到的回复的值返回给另一个 QByteArray,只需设置一个附加信号,该信号要么在完成时触发,要么使用 emit 调用,并且通过这种方式传递价值。

【讨论】:

  • 我想用我存储在 QbyteArray 中的数据创建一个新的 QNreply。
【解决方案2】:

我按照here 的描述做了,解决了我的问题。我错过了偏移量,所以每次调用 readData() 时,都会从头开始读取数据。为了关闭连接,我将 CustomReply 的完成信号连接到原始 QNReply。当我获得足够的数据时,我会发出完成信号以关闭连接。调用 abort 或 close 将导致 ERROR 5(虽然您可以处理该错误,但我发现使用 signal 有点酷)。

谢谢大家。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 2011-02-04
    • 2016-03-22
    • 1970-01-01
    相关资源
    最近更新 更多