从Qt4.4开始,引入了QNetworkRequest、QNetworkReply 和 QNetworkAccessManager等类来进行HTTP、FTP的操作,替代之前的QFtp和QHttp。要使用这些类,先引入network模块:

网络访问API围绕QNetworkAccessManager对象构建,它包含发送的请求的通用配置和设置。它包含代理和缓存配置,以及与此类问题相关的信号,以及可用于监控网络操作进度的回复信号。由于QNetworkAccessManager基于QObject,因此只能从它所属的线程中使用它。

创建QNetworkAccessManager对象后,应用程序就可以使用它通过网络发送请求。 该类提供了一组标准函数,它们接收请求和可选数据,每个函数都返回一个QNetworkReply对象。返回的对象用于获取响应请求而返回的任何数据。

QNetworkAccessManager将收到的请求排队。并行执行的请求数取决于协议。目前,对于桌面平台上的HTTP协议,一个主机/端口组合并行执行6个请求。请求完成后,用户有责任在适当的时间删除QNetworkReply对象。不要在连接到finished()的插槽内直接删除它,可以使用deleteLater()函数。

服务请求QNetworkRequest

要发起一个get/post请求,首先要构建一个QNetworkRequest对象作为参数,它包含一个URL和一些可用于修改请求的辅助信息

connect(m_reply, SIGNAL(downloadProgress(qint64, qint64)),

this, SLOT(onDownloadProgress(qint64, qint64)));

connect(m_reply, SIGNAL(readyRead()), this, SLOT(onReadyRead()));

connect(m_reply, SIGNAL(finished()), this, SLOT(onFinished()));

connect(m_reply, SIGNAL(error(QNetworkReply::NetworkError)),

this, SLOT(onError(QNetworkReply::NetworkError)));

注意finish信号会先到达,readyRead信号仍会不断收到数据data。downloadProgress信号在接收参数等于总大小参数时,完成接收数据。

[SIGNAL]void QNetworkReply::downloadProgress(qint64 bytesReceived,qint64 bytesTotal)

发出此信号是为了指示此网络请求的下载部分(如果有)的进度。如果没有与此请求相关联的下载,则此信号将以0作为bytesReceived和bytesTotal的值发出一次。

bytesReceived参数指示接收的字节数,而bytes total指示预期下载的字节总数。如果不知道要下载的字节数,bytesTotal将为-1。

当bytesReceived等于bytesTotal时,下载完成。届时,bytesTotal将不会是-1。

注意,bytesReceived和bytesTotal的值可能不同于size()、通过read()或readAll()获得的字节总数或头的值(ContentLengthHeader)。其原因是可能存在协议开销或数据在下载期间可能被压缩。

[SIGNAL]void QNetworkReply::finished()

该信号在应答处理完成后发出。发出此信号后,将不再更新回复的数据或元数据。

除非调用了close()或abort(),否则仍会打开回复进行读取,因此可以通过调用read()或readAll()来检索数据。特别是,如果readyRead()没有调用read(),则对readAll()的调用将检索QByteArray中的全部内容。

此信号与QNetworkAccessManager::finished()一起发出,其中该信号的应答参数是此对象。

注意:不要删除与此信号连接的插槽中的对象。使用deleteLater()。

您还可以使用isFinished()检查QNetworkReply是否在接收finished()信号之前完成。

Q Network Reply 类封装了 使用 Q Network Access Manager 发布的请求相关的回复信息。 Q Network Reply 是QIODevice的子类,这意味着一旦从对象中读取数据,它就不再由设备保留。因此,如果需要,应用程序有责任保留这些数据。 注意:不要删除连接到errorOccurred() 或finished() 信号的槽中的对象。应该 使用 使用 deleteLater()。 二、类型成员 1、enum Q Network Reply:: Network Error:指. Q Network Access Manager 超时处理及正确响应 文章目录前言一、Q Network Access Manager 相关信号二、超时处理1.超时原因(参考过来的)2.如何处理超时3.封装类总结 项目中,需要用http,get post,去后端请求服务,而由于网络情况不定,在非常弱网的情况下,http长时间拿不到应答,所以项目需要自己手动做个计时,超过该时间主动放弃该请求。 qt 中Q Network Access Manager 提供了非常方便的异步api,但是手动设置超时的相关接口,需要自己来实现 简述在 Qt 之 HTTP 请求 下载 (支持断点续传) 文章中我们 使用 Qt 的方法进行HTTP 请求 下载 文件 ,同时能够断点续传,本篇文章是这一篇文章的续篇。我们一般在网上 下载 软件、电影、 文件 等,大都是 使用 迅雷 下载 ,因为迅雷 下载 相对而言较快。在我们日常生活中, 使用 迅雷 下载 文件 时,非常占网速,甚至会占用整个家庭局域网的带宽。有时候浏览器都打不开网页,但是迅雷有限速功能,能够保护正常上网。下面看一张图。这 文章目录前言 Qt 高层网络操作类介绍基于HTTP协议的网络 文件 下载 (包含 下载 进度、当前 下载 速度、剩余时间) 下载 动态示意图   前面讲解了主流的TCP/UDP请求后,该到用处最多的HTTP请求了,在 Qt 中要 使用 HTTP请求,在 Qt 4的时候有专门的QHttp,QFtp类 使用 ,可惜在 Qt 5已经全部干掉了,统一封装了接口Q Network Access Manager ,下面主要就是围绕该类展开一个系统性的介绍和 使用 !玩转此类, Qt 5的网络请求基本就不在话下了! Qt 高层网络操作类介绍 Qt 网络模块提供–些类实 说一下 Qt 的Q Network 模块吧 qt 提供的这个网络模块还是很好用 如果不是特别大型的项目,对网络有极高的要求, 使用 curl啥的,否则这个Q Network 完全满足了。 pro += Q Network vs的勾选Q Network 我们需要 使用 到3个东西 #include <Q Network Access Manager > #include <Q Network Reply> #include <Q Network Request> Q Network Ac     m_file = new QFile(m_filePath, this);//m_filePath 下载 地址     if (!m_file-&gt;open(QIODevice::WriteOnly)) {         emit result(false, tr("Write file error!\n") + m_file-&... qt 提供的一系列接口是的 qt 程序在网络通信方面非常便捷,在项目开发中很多朋友会用到http协议来上传 文件 到服务器或者从服务器 下载 文件 下来,这里面上传和 下载 的进度显示是一个提高用户体验很重要的实现,在这里简要讲一下这两个实现: 其实实现很简单,只要连接Q Network Reply类的两个信号便可以,先看文档: void Q Network Reply::uploadProgress(qint 1、 Qt 网络访问 API 是围绕 Q Network Access Manager 对象构建的,该对象保存它发送的请求的通用配置和设置。一个 Q Network Access Manager 实例应该足以满足整个 Qt 应用程序网络访问的需求。 由于 Q Network Access Manager 是基于 QObject 的,所以只能在它所属的线程中 使用 。 2、一旦创建了 Q Network Access Manager 对象,应用程序就可以 使用 它通过网络发送请求。它提供了一组标准函数,它们接受一个请求和可选数据, QT 网络访问API是围绕一个Q Network Access Manager 对象构建的,该对象保存它发送的请求的公共配置和设置。它包含代理和缓存配置,以及与此类问题相关的信号,以及可用于监视网络操作进度的回复信号。一个Q Network Access Manager 实例应该足够用于整个 Qt 应用程序。由于Q Network Access Manager 基于QObject,因此只能从它所属的线程 使用 它。 一旦创建了Q Network Access Manager 对象,应用程序就可以 使用 它通过网络发送请求。提供了一组标准函数,它们 Q Network Access Manager 其实就是一个访问网络接口的管理工具类,该对象保存了它发送的请求的公共配置和设置(其实就是 Q Network Request 里的配置数据)。它包含代理和缓存配置,以及与此类问题相关的信号,以及可用于监视网络操作进展的应答信号,也就是 下载 进度、上传进度等信号。一个Q Network Access Manager 实例对整个 Qt 应用程序来说就足够了。由于Q Network Access Manager 是基于QObject的,它只能从它所属的线程 使用