1.pro文件添加

QT       += core gui network

2.头文件

#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QFile>

3.widget.h文件

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QFile>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = nullptr);~Widget();QNetworkAccessManager *manager;QNetworkReply *reply;QFile *myfile;void Init();void doProcessReadyRead();void doProcessFinished();void doProcessDownloadProgress(qint64,qint64);void doProcessError(QNetworkReply::NetworkError code);
private slots:void on_pushButton_clicked();private:Ui::Widget *ui;
};#endif // WIDGET_H

4.widget.cpp文件

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QFile>
#include <QMessageBox>
#include <QDebug>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);Init();}void Widget::Init()
{manager = new QNetworkAccessManager(this);myfile = new QFile(this);
}void Widget::on_pushButton_clicked()
{QNetworkRequest request;QString url = ui->lineEdit->text();request.setUrl(QUrl(url));reply = manager->get(request);              //发送请求connect(reply,&QNetworkReply::readyRead,this,&Widget::doProcessReadyRead);                //可读connect(reply,&QNetworkReply::finished,this,&Widget::doProcessFinished);                  //结束connect(reply,&QNetworkReply::downloadProgress,this,&Widget::doProcessDownloadProgress);  //大小connect(reply,QOverload<QNetworkReply::NetworkError>::of(&QNetworkReply::error),          //异常this,&Widget::doProcessError);QStringList list = url.split("/");QString filename = list.at(list.length()-1);QString file = "E:/tp/" + filename;myfile->setFileName(file);bool ret = myfile->open(QIODevice::WriteOnly|QIODevice::Truncate);    //创建文件if(!ret){QMessageBox::warning(this,"warning","打开失败");return;}ui->progressBar->setValue(0);             //设置进度条初始化为0ui->progressBar->setMinimum(0);
}void Widget::doProcessReadyRead()             //读取并写入
{while(!reply->atEnd()){QByteArray ba = reply->readAll();myfile->write(ba);}
}void Widget::doProcessFinished()
{myfile->close();
}void Widget::doProcessDownloadProgress(qint64 recv_total, qint64 all_total)      //显示
{ui->progressBar->setMaximum(all_total);ui->progressBar->setValue(recv_total);QStringList list = ui->lineEdit->text().split("/");QString filename = list.at(list.length()-1);QString data = "下载成功--" + filename;ui->textEdit->setText(data);
}void Widget::doProcessError(QNetworkReply::NetworkError code)
{qDebug() << code;
}Widget::~Widget()
{delete ui;
}

5.widget.ui文件


Qt资料领取(视频教程+文档+代码+项目实战)腾讯文档-在线文档https://docs.qq.com/doc/DRkFpUUJGWEtjemhX

QT——HTTP文件下载器相关推荐

  1. python写一个文件下载器_Python3使用TCP编写一个简易的文件下载器

    原标题:Python3使用TCP编写一个简易的文件下载器 利用Python3来实现TCP协议,和UDP类似.UDP应用于及时通信,而TCP协议用来传送文件.命令等操作,因为这些数据不允许丢失,否则会造 ...

  2. 使用IntentService给自己的Android应用写一个文件下载器。

    接着上一篇的http://www.cnblogs.com/zhengxt/p/3657833.html,当我们想给自己的APP写一个文件下载器时,可以用重写IntentService来实现. 使用In ...

  3. python写一个文件下载器_python使用tcp实现一个简单的下载器

    上一篇中介绍了tcp的流程,本篇通过写一个简单的文件下载器程序来巩固之前学的知识. 文件下载器的流程如下: 客户端: 输入目标服务器的ip和port 输入要下载文件的名称 从服务器下载文件保存到本地 ...

  4. 【多线程编程学习】java多线程基于数据分割的大文件下载器

    文章目录 代码:基于数据分割的大文件下载器 作为包装的存储对象类: 主文件下载类: 子任务下载类: 处理缓存: 启动类: 数据分割思想产生的问题 代码来自书籍<java多线程编程实战指南> ...

  5. Qt Creator调试器故障排除

    Qt Creator调试器故障排除 调试器故障排除 无法启动调试器 调试器不会达到断点 调试器不起作用 指针变量成员不直接显示 结构成员未按结构布局排序 内置调试器在启动和运行期间速度很慢 调试器无法 ...

  6. python文件下载器代码_GitHub - applechi/pythonCollection: python代码集合(文件下载器、pdf合并、极客时间专栏下载、掘金小册下载、新浪微博爬虫等)...

    json2mysql 这次更新了将一个json文件中的数据导入到mysql的脚本. 是用nodejs写的. 对应的文件是tomysql.js 有兴趣的同志可以研究下. pythonCollection ...

  7. renameto 阻塞_打造简化版文件下载器

    一. 前言 Executors 是一种典型的生产者 - 消费者模式, java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池.线程池就是将线程进行池化,需要运 ...

  8. 第六章 Qt布局管理器Layout

    第六章 Qt布局管理器Layout 大家有没有发现一个现象,我们放置一个组件,给组件最原始的定位是给出这个控件的坐标和宽高值,这样Qt就知道这个组件的位置.当用户改变窗口的大小,组件还静静地呆在原来的 ...

  9. 使用网络TCP搭建一个简单文件下载器

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目介绍 二丶服务器Server 三丶测试TCP server服务器 四丶客户端Client 五丶测试客户端向服务器下载 ...

最新文章

  1. 学校通用计算机保护,浅谈学校计算机教室软件系统的保护.docx
  2. SpringBoot+MyBatisPlus+Echarts实现查询并显示平均时长占比饼状图
  3. linux 下启动mysql
  4. leetcode116. 填充每个节点的下一个右侧节点指针(层序遍历07)
  5. Spring MVC:高级会话
  6. 给Win32 GUI程序增加控制台窗口的方法
  7. 【Elasticsearch】Elasticsearch 6.0中节省空间的改进
  8. 2100 没有反弹shell_反弹shell | ncbash
  9. 数据集-知识图谱:FreeBase(通用知识图谱)【英文】
  10. 在线购物系统 实验七 顺序图
  11. 期货穿仓和爆仓有何区别?
  12. Tomcat端口被占用,解决方法
  13. python保存不了_python文件无法保存怎么解决
  14. 用计算机找女朋友,大学生必备远程软件:能找女朋友、玩游戏、赚零花钱
  15. 如何使用kindle
  16. Verilog VHDL三种建模描述方式——2选1数据选择器
  17. 三菱je -c中映射表的作用_2020江苏三菱PLCFX1S14MT回收回收上门估价欧姆龙安全继电器...
  18. 自然用户界面设计:NUI的经验教训与设计原则
  19. 网络突发环路,原来可以这么解决啊
  20. ArcGIS Server 利用掩膜遮挡(免裁剪)将影像叠加发布 方法——节省大量影像裁剪时间

热门文章

  1. 和我一起学 Three.js【初级篇】:3. 掌握摄影机
  2. 软件 著作权 代理 登记 598/件,量大从优
  3. 如何在本地完成CS231n课程作业
  4. 一行代码解决scp在Internet传输慢的问题
  5. 气象数据grib/grib2的处理方法汇总
  6. 《质量免费》读后感_20161125
  7. 笔记本预装win8改win7系统的方法
  8. JS逆向:维普期刊rs5(非正面对抗)
  9. 下载文件中英文逗号导致下载失败
  10. 计算机网什么是cih病毒,CIH病毒是什么?