Qt网络编程之QNetworkReply

来源:互联网 发布:java合成多张图片 编辑:程序博客网 时间:2024/06/04 19:31
 

Qt网络编程之QNetworkReply

分类: Qt 1737人阅读 评论(0) 收藏 举报
                                       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 ValueDescription
《一些枚举类型,内容太多,自己看帮助文档》

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类似。

原创粉丝点击