关于qt的http上传和下载资源的进度条显示

原创 2015年07月08日 15:39:02

qt提供的一系列接口是的qt程序在网络通信方面非常便捷,在项目开发中很多朋友会用到http协议来上传文件到服务器或者从服务器下载文件下来,这里面上传和下载的进度显示是一个提高用户体验很重要的实现,在这里简要讲一下这两个实现:

其实实现很简单,只要连接QNetworkReply类的两个信号便可以,先看文档:

上传:

void QNetworkReply::uploadProgress(qint64 bytesSent, qint64 bytesTotal)
This signal is emitted to indicate the progress of the upload part of this network request, if there's any. If there's no upload associated with this request, this signal will not be emitted.
The bytesSent parameter indicates the number of bytes uploaded, while bytesTotal indicates the total number of bytes to be uploaded. If the number of bytes to be uploaded could not be determined, bytesTotal will be -1.
The upload is finished when bytesSent is equal to bytesTotal. At that time, bytesTotal will not be -1.

下载:

void QNetworkReply::downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
This signal is emitted to indicate the progress of the download part of this network request, if there's any. If there's no download associated with this request, this signal will be emitted once with 0 as the value of both bytesReceived and bytesTotal.
The bytesReceived parameter indicates the number of bytes received, while bytesTotal indicates the total number of bytes expected to be downloaded. If the number of bytes to be downloaded is not known, bytesTotal will be -1.
The download is finished when bytesReceived is equal to bytesTotal. At that time, bytesTotal will not be -1.
Note that the values of both bytesReceived and bytesTotal may be different from size(), the total number of bytes obtained through read() or readAll(), or the value of the header(ContentLengthHeader). The reason for that is that there may be protocol overhead or the data may be compressed during the download.

只要connect这两个信号到相应的槽,获得两个参数,便可以知道当前进度。其中第二个参数是当前操作文件的大小,第一个便是已上传或下载的大小

如何使用这两个信号?

大家都知道用qt的QNetworkAccessManager可以上传和下载,在调用get()和post()的时候放回一个QNetworkReply指针,我要做的就是connect这个指针的这两个信号就可以获得状态了:

QNetworkReply *reply;
QNetworkAccessManager *manager = new QNetworkAccessManager;
......

reply = manager->get(QNetworkRequest(url));
//更新进度条
connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(updateDataReadProgress(qint64,qint64)));

有必要可以联系我要例子~

Qt之HTTP上传/下载

简述在前面章节中我们讲述了关于Qt显示网络图片的内容,比较简单,因为图片一般都比较小,下载到本地速度比较快,所以基本不需要什么特殊处理,本节我们主要针对HTTP实现上传/下载进行详细的讲解与分享,包括...
  • u011012932
  • u011012932
  • 2016年03月06日 17:36
  • 9169

Qt 之 HTTP 请求下载(支持断点续传)

简述最近在研究了一下用Qt 的方法来实现http下载,Qt 中的Http请求主要用到了QNetworkAccessManager、QNetworkReply、QNetworkRequest 这三块。本...
  • GoForwardToStep
  • GoForwardToStep
  • 2016年09月29日 20:32
  • 4689

qt使用http下载文件(断点续传)

最近使用Qt需要用到http下载文件,其中关于断点续传的问题被困扰了,在这里记下来。 1,Qt使用http实现下载主要用到的3个类 QNetworkAccessManager,QNetwork...
  • polopi
  • polopi
  • 2017年09月11日 16:35
  • 345

qt http 下载文件

本文章介绍如何利用HTTP从网站上下载文件。在Qt网络编程中,需要用到协议,即HTTP。它是超文本传输协议,它是一种文件传输协议。对于HTTP就不多解释了。 在Qt网络编程中,需...
  • zhangbinsijifeng
  • zhangbinsijifeng
  • 2015年08月13日 09:19
  • 2048

QT之HTTP下载获取文件大小信息

记录点滴,只为分享!希望对你有帮助,因为我也是在别人的帮助中慢慢成长!...
  • ly305750665
  • ly305750665
  • 2016年12月06日 19:44
  • 1602

Qt通过QNetworkAccessManager实现Http get方法文件下载

前面已经实现了Qt的网络通信,这里在网络通信的基础上加上文件下载功能。相比与之前的例子添加了QFile与QProgressBar这两个类 dialog.h [cpp] view...
  • u014746838
  • u014746838
  • 2017年11月07日 22:11
  • 182

QT之HTTP下载文件大小为0

QT之HTTP下载文件大小为0,状态码200 OK
  • ly305750665
  • ly305750665
  • 2016年12月07日 20:34
  • 519

Qt下载地址

上Qt官网http://www.qt.io/download/想下载Qt,速度很慢,在这里记录下在Qt官网看到的镜像下载地址: 1. 所有Qt版本下载地址: http://download.qt.io...
  • friendan
  • friendan
  • 2015年04月04日 15:39
  • 115922

qt url下载链接 获取文件名

目前连接有 http://192.168.2.1:/app/test.pdf 和http://192.168.2.1:/Servlet?action=7&file=erc_y.raq&columns=...
  • u014746838
  • u014746838
  • 2017年12月02日 11:11
  • 131

Qt 之 HTTP 请求下载(支持断点续传)

  • 2016年09月29日 22:11
  • 37KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于qt的http上传和下载资源的进度条显示
举报原因:
原因补充:

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