Qt实现HTTP协议文件下载功能QNetworkAccessManager

0 668
索鸟 2021-03-22
需要:0索币

.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_OBJECT public: 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); //设置进度条初始化为0 ui->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文件

原文地址:https://www.cnblogs.com/IntelligencePointer/p/11484014.html

回帖
  • 消灭零回复
相关主题
2020年最新最新Kubernetes视频教程(K8s)教程 2
程序员转型之制作网课变现,月入过万告别996 1
索鸟快传2.0发布啦 1
两个不同网络的电脑怎么实现文件的互相访问呢? 1
网盘多账号登录软件 1
Java实战闲云旅游项目基于vue+element-ui 1
单点登录技术解决方案基于OAuth2.0的网关鉴权RSA算法生成令牌 1
QT5获取剪贴板上文本信息QT设置剪贴板内容 1
springboot2实战在线购物系统电商系统 1
python web实战之爱家租房项目 1
windows COM实用入门教程 1
C++游戏开发之C++实现的水果忍者游戏 1
计算机视觉库opencv教程 1
node.js实战图书管理系统express框架实现 1
C++实战教程之远程桌面远程控制实战 1
相关主题
PHP7报A non well formed numeric value encountered 0
Linux系统下关闭mongodb的几种命令分享 0
mongodb删除数据、删除集合、删除数据库的命令 0
Git&Github极速入门与攻坚实战课程 0
python爬虫教程使用Django和scrapy实现 0
libnetsnmpmibs.so.31: cannot open shared object file 0
数据结构和算法视频教程 0
redis的hash结构怎么删除数据呢? 0
C++和LUA解析器的数据交互实战视频 0
mongodb errmsg" : "too many users are authenticated 0
C++基础入门视频教程 0
用30个小时精通C++视频教程可能吗? 0
C++分布式多线程游戏服务器开发视频教程socket tcp boost库 0
C++培训教程就业班教程 0
layui的util工具格式时间戳为字符串 0
C++实战教程之远程桌面远程控制实战 1
网络安全培训视频教程 0
LINUX_C++软件工程师视频教程高级项目实战 0
C++高级数据结构与算法视频教程 0
跨域问题很头疼?通过配置nginx轻松解决ajax跨域问题 0