Qt网络编程之QNetworkReply

翻译 2012年03月25日 19:52:10
                                       Qt网络编程之QNetworkReply
注意:这个类中的所有函数都是可重入的。
这个类是从Qt4.4引入的。


详细描述:
        QNetworkReply 类包含了发送给QNetworkManager的数据和首部。
QNetworkReply类包含了发送给QNetworkAccessManager请求的所有应答数据。和QNetworkRequest类似,这些数据包含了一个URL和一些首部信息(同时包含解析后的和原始形式的),以及一些和应答状态相关的信息,再加上应答信息自身的内容。
        QNetworkReply是一个顺序访问的QIODevice,这也意味着一旦数据从该对象中读取出来,那么该对象就不再持有这些数据。因此,当需要保存数据的时候,这个工作应该由应用程序完成。无论什么时候从网络中获取到更多数据并进行处理,readyRead()信号都会被触发。
        downloadProgress()信号在接收到数据的时候也会被发送,但是它所持有的数据量不一定就是真实接收到的数据量,如果对这些内容的传输进行操作(例如:解压缩,移除协议头信息)。
       尽管QNetworkReply是一个与应答信息关联的QIODevice,它同样触发uploadProgress()信号,这表明upload操作拥有这些数据。

注意:不要在连接到error()或者finished()的槽函数里删除该对象,应该使用deleteLater()。

成员类型文档
enum QNetworkReply::NetworkError
表明在处理请求的过程中所有可能的错误情况
Constant Value Description
《一些枚举类型,内容太多,自己看帮助文档》

typedef QNetworkReply::RawHeaderPair
RawHeaderPair是一个 QPair<QByteArray, QByteArray>,第一个QByteArray 代表头部的名字;第二个代表头部信息。

void QNetworkReply::finished () [signal]
       当应答信息被处理完毕时这个信号就会被触发。当这个信号被触发后,就不会再对应答数据或者元数据进行更新。除非close()被调用,否则应答信息会一直被打开等待读取,可以通过read()或者readAll()方法读取数据。特别地,在readyRead后如果没有调用read(),那么调用readAll()就会将所有的内容都存储在一个QByteArray中。
        这个信号和QNetworkAccessManager::finished()是串联触发的。
注意:
        不要在与这个信号关联的槽函数中直接删除掉QNetworkReply对象,应该使用deleteLater()。

你可以在收到finished()信号之前使用isFinished()函数检查一个QNetworkReply是否已经结束。


另外一些重要的函数就是对应答信息的读取函数了:



void QNetworkReply::downloadProgress ( qint64 bytesReceived, qint64 bytesTotal ) [signal]
       这个信号被触发,用来表明该网络请求的下载部分的进度。如果该网络请求没有相关联的下载部分,这个信号在参数bytesReceived和bytesTotal的值都为0的时候会被触发一次。
       参数bytesReceived表明已经接收到的数据量,而bytesTotal则表明总共期望下载的数据量。如果期望下载的数据量未知,那么bytesTotal就为-1。
       当bytesReceived和bytesTotal相等的时候就表明下载完毕。那时,bytesTotal就不等于-1了。
       注意,bytesReceived和bytesTotal的值也许都和size()不同,通过read()或者readAll()获得的总的数据量,或者表明数据量的头部的值(ContentLengthHeader)。造成这种情况的原因是,协议头部或者是数据在下载的过程总可能被压缩。


void QNetworkReply::uploadProgress ( qint64 bytesSent, qint64 bytesTotal ) [signal]
       该信号表示的是网络请求中上传的部分,其它都和上面的downloadProgress类似。

QNetworkAccessManager不使用信号/槽机制来获得QNetworkReply的解决办法

正在做一个第三方微信企业要接口的项目,JAVA的实现方法比较简单,网上资料也很多。 但是我需要在C++下实现,微信企业号接口大多都是https的GET/POST方法实现的。 Qt提供了一个封装好的类Q...

QNetworkReply

Qt网络编程之QNetworkReply 注意:这个类中的所有函数都是可重入的。 这个类是从Qt4.4引入的。 详细描述:         QNetworkReply 类包含了发送给Q...

网络(二) HTTP

该文章原创于Qter开源社区(www.qter.org),作者yafeilinux,转载请注明出处! 导语         HTTP(HyperText Transfer Proto...

Qt网络编程之QNetworkAccessManager

注意:这个类的所有函数都是可重入的。        这个类是从Qt4.4引入的。 详细描述       QNetworkAccessManager类允许应用程序发送网络请求和接收网络应答。  ...

Qt通过QNetworkAccessManager实现Http网络通信

最近在搞Qt的网络通信和音乐播放的应用,做完每一个部分都会上传上来。下面的这段代码中实现了访问百度主页,返回的信息可以再输出窗查看,代码中注释的部分是上传文件用的。QNetworkAccessMana...

qt 的QNetworkAccessManager的使用和防止内存泄漏

今天项目中用到了http协议,大致看了一下QNetworkAccessManager这个类,发现通过这个类调用了get或者post请求后获取结果居然是通过信号和槽来实现的,结果返回是通过void f...

HttpClient Post和Get请求实例+ 中文参数处理

转自http://starlight00.blog.163.com/blog/static/465183201210961537965/   import java.io.IOExcep...

QT线程QThread的简单使用实例

QT线程QThread的简单使用实例   , 主要介绍以下几点: 1.线程调用start()函数后会自己自动去调用run()函数,一般线程run()函数继承父类重写,即为线程的主要功能执行函数快。...

Qt网络编程之QNetworkReply

Qt网络编程之QNetworkReply 分类: Qt2012-03-25 11:52 1737人阅读 评论(0) 收藏 举报                           ...

Qt网络编程之QNetworkReply

Qt网络编程之QNetworkReply 注意:这个类中的所有函数都是可重入的。 这个类是从Qt4.4引入的。 详细描述:         QNetworkReply 类包含了发送给QNe...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt网络编程之QNetworkReply
举报原因:
原因补充:

(最多只允许输入30个字)