文章目录

  • 前言
  • 如何实现?
  • 总结

前言

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 下载断点续传相关推荐

  1. Qt通过QNetworkAccessManager下载

    近日工作中遇到的问题,做一个记录,做一个第三方的上传和下载的操作,使用了QFTP的一些操作,但是QFTP在版本5之后就取消了,反馈也是说QFTP存在很大的问题. 更改方法后,我使用了QNetworkA ...

  2. 使用OKHttp3实现下载(断点续传、显示进度)

    2019独角兽企业重金招聘Python工程师标准>>> OKHttp3 是如今非常流行的 Android 网络请求框架,那么如何利用 Android 实现断点续传呢,今天写了个 De ...

  3. qt及qt quick开发实战精解_Qt5实战001:Qt 5.15下载安装详解

    什么是QT Qt是一个款跨平台的C++图形用户界面应用程序开发框架,支持包括不限于Windows.Linux.Mac OS X.Android.iOS.WinCE.Unix等平台.Qt 可以绘制漂亮的 ...

  4. QT——Qt QtCreator 官方下载地址

    [系列专栏]:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! <项目案例分享> <极客DIY开源分享> <嵌入式通用开发实战> <C++语言开发基 ...

  5. SpringBoot Java实现Http方式分片下载断点续传+实现H5大视频渐进式播放

    项目Git地址:h5-video 一.功能目的 SpringBoot 实现Http分片下载断点续传,从而实现H5页面的大视频播放问题,实现渐进式播放,每次只播放需要播放的内容就可以了,不需要加载整个文 ...

  6. Android多线程下载断点续传

    先上图看卡结果: GITHUB:Android多线程下载断点续传 下载杵这儿 如图所示点击下载就开始下载,点击停止就会停止再次点击下载就会接着下载了. 设计思路是这样的: 首先通过广播将下载信息传递给 ...

  7. 猫猫学Swift之下载-断点续传

    猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://write.blog.csdn.net/postlist 下载-断点续传 通过URLSession进行下载,通过O ...

  8. Qt FTP地址下载中文乱码问题

    Qt FTP地址下载中文乱码问题 前言 一.为什么乱码? 二.解决办法 1.使用QUrl的编码和解码函数 2.使用时遇到的其他问题 总结 前言 最近在做Qt项目,使用FTP下载,需要存储ftp地址,f ...

  9. QT最新版本下载安装(QT5.15及QT6.X)

    QT最新版本下载及安装 包含了QT环境和QT Creator集成开发环境(IDE) 下载 (QT5.15及之后版本不再支持离线安装) 5.14及之前版本下载 QT5.15及之后版本下载 QT5.15及 ...

最新文章

  1. 软件详细设计说明书_校导周绪龙|软件测试第五篇——软件测试的底层思维
  2. Linux网络状态工具ss命令操作详解
  3. ner 评估指标_序列标注算法评估模块 seqeval 的使用
  4. Arch Linux中安装Anaconda
  5. maven依赖传递和排除依赖冲突
  6. vue弹出alert_vue+webpack 实现简单的弹窗(alert)组件
  7. 面试必备资源!程序员面试——算法工程师面试大全第二部分
  8. surface远程登录桌面字小_office365账号赠送(office桌面版+5Tonedrive)
  9. 一名爬虫工程师的运维入门之路:IPy学习笔记
  10. 王通讲生物信息学学习方法
  11. WiFi无法连接?解决macOS Big Sur / Mojave / Catalina上的Wi-Fi问题
  12. Mysql优化(出自官方文档) - 第十篇(优化InnoDB表篇)
  13. Android7.1 Offload模式下的音频数据抽取过程
  14. Atitit 命令行dsl传递参数的几种模式对比 cli url模式 键值对NameValuePair urlutil String string = -host 101.13
  15. 麒麟官方应用商店下载地址
  16. 如何在html中插入表情包,怎么把表情包插入word
  17. 压缩PPT大小的方法是什么?
  18. 【ice】飞冰快速上手笔记
  19. echarts添加基准线
  20. kubernetes deployment,pod 实践

热门文章

  1. 开源作者遭受小白的9种伤害
  2. Android Studio 编译时报文件不能删除,编译失败
  3. 52. 文件上传篇——Apache漏洞原理
  4. python3.6 opencv3.4.3使用surf特征出错【解决方案】
  5. win10免费sdk安装详细过程
  6. 中国科学院计算机研究所调剂,给计算机复试的jr们一点建议,以及欢迎调剂中科院计算机相关研究所...
  7. 如何写一份优秀的微信营销方案
  8. webpack4对比webpack5
  9. uva 11800 Determine the Shape
  10. win10更新不动_Win10更新总失败?学会这三招搞定它