Qt 之QNetworkAccessManager 下载断点续传
文章目录
- 前言
- 如何实现?
- 总结
前言
qt的QNetworkAccessManager get在下载文件时,当网络环境不确定行比较大时,比如网络断开等,往往需要程序实现断点续传的功能,好在qt帮我们做好了。下面看实现方法
如何实现?
用代码来回答。核心代码如下
#include
#include
#include
#include
#include
#include
class mDownload : public QObject {Q_OBJECTpublic:mDownload (QObject *parent = nullptr);~mDownload ();Q_INVOKABLE void startDownload(const QString &url,const QString &saveFilePath, bool bOverWrite);signals:void progressChanged(qreal progress);void started();void finished();void update(int kiloBytesReceived, int kiloBytesTotal);void error(int errorCode, QString errorString);private slots:void onReadyRead();void onError(QNetworkReply::NetworkError ercode);void onFinished();void onDownloadProgress(qint64 bytesReceived, qint64 bytesTotal);private:QNetworkAccessManager *_netManager;QNetworkReply *_networkReply;bool _bOverWrite; //下载模式是否是直接覆盖qint64 _fileBeginSize; //记录开始下载的位置
};void mDownload ::innerStartDownload() {if (_running) {if (_networkReply) {if (_networkReply->isRunning()) _networkReply->abort();shutdownNetworkReply();shutdownSaveFile();}}_fileBeginSize = 0;if (_bOverWrite) {_file = new QFile(_tmpDestination);_file->open(QIODevice::WriteOnly);} else {_file = new QFile(_tmpDestination);_fileBeginSize = _file->size();_file->open(QIODevice::WriteOnly | QIODevice::Append);}QNetworkRequest request;QSslConfiguration config = QSslConfiguration::defaultConfiguration();config.setProtocol(QSsl::TlsV1_2);config.setPeerVerifyMode(QSslSocket::VerifyNone);request.setSslConfiguration(config);request.setUrl(QUrl(_url));QString strRange = QString("bytes=%1-").arg(_fileBeginSize);request.setRawHeader("Range", strRange.toUtf8());_networkReply = _netManager->get(request);connectToNetworkReplySignals();_lastReceiveDataTime = QDateTime::currentMSecsSinceEpoch();_checkNetWorkTimer->start();_progress = 0;_tryDownloadTimes++;setProgress(0.0);_running = true;
}
核心代码如上,主要是下面两行来实现断点续传功能:
request.setUrl(QUrl(_url));QString strRange = QString("bytes=%1-").arg(_fileBeginSize);request.setRawHeader("Range", strRange.toUtf8());_networkReply = _netManager->get(request);
总结
方便吧。
Qt 之QNetworkAccessManager 下载断点续传相关推荐
- Qt通过QNetworkAccessManager下载
近日工作中遇到的问题,做一个记录,做一个第三方的上传和下载的操作,使用了QFTP的一些操作,但是QFTP在版本5之后就取消了,反馈也是说QFTP存在很大的问题. 更改方法后,我使用了QNetworkA ...
- 使用OKHttp3实现下载(断点续传、显示进度)
2019独角兽企业重金招聘Python工程师标准>>> OKHttp3 是如今非常流行的 Android 网络请求框架,那么如何利用 Android 实现断点续传呢,今天写了个 De ...
- qt及qt quick开发实战精解_Qt5实战001:Qt 5.15下载安装详解
什么是QT Qt是一个款跨平台的C++图形用户界面应用程序开发框架,支持包括不限于Windows.Linux.Mac OS X.Android.iOS.WinCE.Unix等平台.Qt 可以绘制漂亮的 ...
- QT——Qt QtCreator 官方下载地址
[系列专栏]:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! <项目案例分享> <极客DIY开源分享> <嵌入式通用开发实战> <C++语言开发基 ...
- SpringBoot Java实现Http方式分片下载断点续传+实现H5大视频渐进式播放
项目Git地址:h5-video 一.功能目的 SpringBoot 实现Http分片下载断点续传,从而实现H5页面的大视频播放问题,实现渐进式播放,每次只播放需要播放的内容就可以了,不需要加载整个文 ...
- Android多线程下载断点续传
先上图看卡结果: GITHUB:Android多线程下载断点续传 下载杵这儿 如图所示点击下载就开始下载,点击停止就会停止再次点击下载就会接着下载了. 设计思路是这样的: 首先通过广播将下载信息传递给 ...
- 猫猫学Swift之下载-断点续传
猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://write.blog.csdn.net/postlist 下载-断点续传 通过URLSession进行下载,通过O ...
- Qt FTP地址下载中文乱码问题
Qt FTP地址下载中文乱码问题 前言 一.为什么乱码? 二.解决办法 1.使用QUrl的编码和解码函数 2.使用时遇到的其他问题 总结 前言 最近在做Qt项目,使用FTP下载,需要存储ftp地址,f ...
- QT最新版本下载安装(QT5.15及QT6.X)
QT最新版本下载及安装 包含了QT环境和QT Creator集成开发环境(IDE) 下载 (QT5.15及之后版本不再支持离线安装) 5.14及之前版本下载 QT5.15及之后版本下载 QT5.15及 ...
最新文章
- 软件详细设计说明书_校导周绪龙|软件测试第五篇——软件测试的底层思维
- Linux网络状态工具ss命令操作详解
- ner 评估指标_序列标注算法评估模块 seqeval 的使用
- Arch Linux中安装Anaconda
- maven依赖传递和排除依赖冲突
- vue弹出alert_vue+webpack 实现简单的弹窗(alert)组件
- 面试必备资源!程序员面试——算法工程师面试大全第二部分
- surface远程登录桌面字小_office365账号赠送(office桌面版+5Tonedrive)
- 一名爬虫工程师的运维入门之路:IPy学习笔记
- 王通讲生物信息学学习方法
- WiFi无法连接?解决macOS Big Sur / Mojave / Catalina上的Wi-Fi问题
- Mysql优化(出自官方文档) - 第十篇(优化InnoDB表篇)
- Android7.1 Offload模式下的音频数据抽取过程
- Atitit 命令行dsl传递参数的几种模式对比 cli url模式 键值对NameValuePair urlutil 	String string = -host 101.13
- 麒麟官方应用商店下载地址
- 如何在html中插入表情包,怎么把表情包插入word
- 压缩PPT大小的方法是什么?
- 【ice】飞冰快速上手笔记
- echarts添加基准线
- kubernetes deployment,pod 实践
热门文章
- 开源作者遭受小白的9种伤害
- Android Studio 编译时报文件不能删除,编译失败
- 52.	文件上传篇——Apache漏洞原理
- python3.6 opencv3.4.3使用surf特征出错【解决方案】
- win10免费sdk安装详细过程
- 中国科学院计算机研究所调剂,给计算机复试的jr们一点建议,以及欢迎调剂中科院计算机相关研究所...
- 如何写一份优秀的微信营销方案
- webpack4对比webpack5
- uva 11800 Determine the Shape
- win10更新不动_Win10更新总失败?学会这三招搞定它