2012-08-13 90 views
0

这是我在这里的第一篇文章,我对Qt相当陌生。如何设置QNetworkReply的内容

我正在使用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,但无法解决我的问题。

预先感谢您。

+0

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

回答

0

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

谢谢大家。

0

我不是你的问题100%清楚,但如果你想回到你收到另一个的QByteArray刚刚成立,其无论是在完成发射或emit和通称为附加信号的答复的价值这种方式的价值。

+0

我想用我存储在QbyteArray中的数据创建一个新的QNreply。 – mrz 2012-08-14 05:58:00