QT——HTTP文件下载器
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文件下载器相关推荐
- python写一个文件下载器_Python3使用TCP编写一个简易的文件下载器
原标题:Python3使用TCP编写一个简易的文件下载器 利用Python3来实现TCP协议,和UDP类似.UDP应用于及时通信,而TCP协议用来传送文件.命令等操作,因为这些数据不允许丢失,否则会造 ...
- 使用IntentService给自己的Android应用写一个文件下载器。
接着上一篇的http://www.cnblogs.com/zhengxt/p/3657833.html,当我们想给自己的APP写一个文件下载器时,可以用重写IntentService来实现. 使用In ...
- python写一个文件下载器_python使用tcp实现一个简单的下载器
上一篇中介绍了tcp的流程,本篇通过写一个简单的文件下载器程序来巩固之前学的知识. 文件下载器的流程如下: 客户端: 输入目标服务器的ip和port 输入要下载文件的名称 从服务器下载文件保存到本地 ...
- 【多线程编程学习】java多线程基于数据分割的大文件下载器
文章目录 代码:基于数据分割的大文件下载器 作为包装的存储对象类: 主文件下载类: 子任务下载类: 处理缓存: 启动类: 数据分割思想产生的问题 代码来自书籍<java多线程编程实战指南> ...
- Qt Creator调试器故障排除
Qt Creator调试器故障排除 调试器故障排除 无法启动调试器 调试器不会达到断点 调试器不起作用 指针变量成员不直接显示 结构成员未按结构布局排序 内置调试器在启动和运行期间速度很慢 调试器无法 ...
- python文件下载器代码_GitHub - applechi/pythonCollection: python代码集合(文件下载器、pdf合并、极客时间专栏下载、掘金小册下载、新浪微博爬虫等)...
json2mysql 这次更新了将一个json文件中的数据导入到mysql的脚本. 是用nodejs写的. 对应的文件是tomysql.js 有兴趣的同志可以研究下. pythonCollection ...
- renameto 阻塞_打造简化版文件下载器
一. 前言 Executors 是一种典型的生产者 - 消费者模式, java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池.线程池就是将线程进行池化,需要运 ...
- 第六章 Qt布局管理器Layout
第六章 Qt布局管理器Layout 大家有没有发现一个现象,我们放置一个组件,给组件最原始的定位是给出这个控件的坐标和宽高值,这样Qt就知道这个组件的位置.当用户改变窗口的大小,组件还静静地呆在原来的 ...
- 使用网络TCP搭建一个简单文件下载器
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目介绍 二丶服务器Server 三丶测试TCP server服务器 四丶客户端Client 五丶测试客户端向服务器下载 ...
最新文章
- 学校通用计算机保护,浅谈学校计算机教室软件系统的保护.docx
- SpringBoot+MyBatisPlus+Echarts实现查询并显示平均时长占比饼状图
- linux 下启动mysql
- leetcode116. 填充每个节点的下一个右侧节点指针(层序遍历07)
- Spring MVC:高级会话
- 给Win32 GUI程序增加控制台窗口的方法
- 【Elasticsearch】Elasticsearch 6.0中节省空间的改进
- 2100 没有反弹shell_反弹shell | ncbash
- 数据集-知识图谱:FreeBase(通用知识图谱)【英文】
- 在线购物系统 实验七 顺序图
- 期货穿仓和爆仓有何区别?
- Tomcat端口被占用,解决方法
- python保存不了_python文件无法保存怎么解决
- 用计算机找女朋友,大学生必备远程软件:能找女朋友、玩游戏、赚零花钱
- 如何使用kindle
- Verilog VHDL三种建模描述方式——2选1数据选择器
- 三菱je -c中映射表的作用_2020江苏三菱PLCFX1S14MT回收回收上门估价欧姆龙安全继电器...
- 自然用户界面设计:NUI的经验教训与设计原则
- 网络突发环路,原来可以这么解决啊
- ArcGIS Server 利用掩膜遮挡(免裁剪)将影像叠加发布 方法——节省大量影像裁剪时间