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

suoniao 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

回帖
  • 消灭零回复
相关主题
QListWidget滚动的时候显示不完整 滚动条模式导致的哦 0
Qt设置顶层面板背景透明Qt::WA_TranslucentBackground 隐藏边框Qt::FramelessWindowHint 0
QCheckBox的QSS样式表总结 0
Qt通过qRegisterMetaType注册自定义数据类型 0
QListwidget触发2次itemClicked事件 0
Qt利用QLabel组件来显示图片 0
TableView自定义代理QStyledItemDelegate实现ComboBox 0
Qt利用QGraphicsView类实现图片放大缩小平移显示 0
Qt实现非阻塞延迟方法sleep 0
Qt实现webdav客户端功能支持https协议的webdav客户端 0
Qt操作windows注册表的方法 bat从注册表中将键值删除 0
重写QSqlQueryModel实现QTableView显示图片 0
QLocalServer基于本地套接字socket的服务端server 0
Qt使用动态库的方法 QLibrary库的典型用法 0
QT实现视频播放器界面开发 0
QTableview实现鼠标放上面显示不同颜色 0
Qt的QTableView自定义委托详解 0
QTableView利用自定义委托实现日期显示下拉菜单文字颜色等 0
Qt利用QApplication::sendEvent和QMouseEvent模拟鼠标点击事件 0
Qt获取父进程路径和父进程ID代码 0
相关主题
QListWidget滚动的时候显示不完整 滚动条模式导致的哦 0
Qt设置顶层面板背景透明Qt::WA_TranslucentBackground 隐藏边框Qt::FramelessWindowHint 0
QMenu和QMenuBar样式表大全 qss 0
QT定时器startTimer和timerEvent事件 每隔interval 毫秒就会启动一次 0
C语言内存分配函数malloc和calloc的区别 0
QCheckBox的QSS样式表总结 0
Qt通过qRegisterMetaType注册自定义数据类型 0
QListwidget触发2次itemClicked事件 0
打印机USB驱动开发之实现打印服务器 0
Qt利用QLabel组件来显示图片 0
TableView自定义代理QStyledItemDelegate实现ComboBox 0
Qt利用QGraphicsView类实现图片放大缩小平移显示 0
Qt实现非阻塞延迟方法sleep 0
海康相机SDK的C++对应的接口 0
Qt实现webdav客户端功能支持https协议的webdav客户端 0
CHKDSK解决 移动硬盘只能看见盘符其它信息都看不见另外双击也打不开 0
gogs一直报errror:dial tcp xxx.xxx.xxx.xxx 宿主机的ip 0
索鸟快传2.1.2发布 0
索鸟快传2.1.1发布 0
Qt操作windows注册表的方法 bat从注册表中将键值删除 0