当前位置: 首页 > news >正文

QT—基于http协议的网络文件下载

1.常用到的类

QNetworkAccessManager类用于协调网络操作,负责发送网络请求,创建网络响应

QNetworkReply类表示网络请求的响应。在QNetworkAccessManager发送一个网络请求后创建一个网络响应。它提供了以下信号:

finished():完成后发出信号

readyRead():有数据读的数据发出信号

downloadProgress():表示网络操作进度的信号,有bytesRead和totalBytes两个参数,表示已读取字节数和总字节数

QNetworkReply 是QIODevice的子类,所以QNetworkReply支持流读写功能,也支持异步或同步工作。

2.代码

.h

#ifndef HTTP_H
#define HTTP_H#include <QMainWindow>
#include <QUrl>
#include <QFile>
#include <QNetworkAccessManager>
#include <QNetworkReply>
QT_BEGIN_NAMESPACE
namespace Ui { class http; }
QT_END_NAMESPACEclass http : public QMainWindow
{Q_OBJECTpublic:http(QWidget *parent = nullptr);~http();private:Ui::http *ui;QNetworkAccessManager networkManager;QNetworkReply *reply;QFile *downFile;public slots:void on_finished();void on_readyRead();void  downLoadProgress(qint64 bytesRead,qint64 totalBytes);
private slots:void on_pushButton_2_clicked();void on_pushButton_clicked();
};
#endif // HTTP_H
#ifndef HTTP_H
#define HTTP_H#include <QMainWindow>
#include <QUrl>
#include <QFile>
#include <QNetworkAccessManager>
#include <QNetworkReply>
QT_BEGIN_NAMESPACE
namespace Ui { class http; }
QT_END_NAMESPACEclass http : public QMainWindow
{Q_OBJECTpublic:http(QWidget *parent = nullptr);~http();private:Ui::http *ui;QNetworkAccessManager networkManager;QNetworkReply *reply;QFile *downFile;public slots:void on_finished();void on_readyRead();void  downLoadProgress(qint64 bytesRead,qint64 totalBytes);
private slots:void on_pushButton_2_clicked();void on_pushButton_clicked();
};
#endif // HTTP_H

.cpp

#include "http.h"
#include "ui_http.h"
#include<QDir>
http::http(QWidget *parent): QMainWindow(parent), ui(new Ui::http)
{ui->setupUi(this);
}http::~http()
{delete ui;
}void http::on_finished()
{QFileInfo fileInfo;fileInfo.setFile(downFile->fileName());downFile->close();delete downFile;reply->deleteLater();reply = nullptr;ui->pushButton->setEnabled(true);}
void http::on_readyRead()
{downFile->write(reply->readAll());
}void http::downLoadProgress(qint64 bytesRead, qint64 totalBytes)
{ui->progressBar->setMaximum(totalBytes);ui->progressBar->setValue(bytesRead);
}void http::on_pushButton_2_clicked()
{//缺省路径QString curPath = QDir::currentPath();QDir dir(curPath);QString sub = "temp";dir.mkdir(sub);ui->lineEdit_2->setText(curPath + "/" + sub + "/");}void http::on_pushButton_clicked()
{//下载QString url = ui->lineEdit->text().trimmed();if(url.isEmpty())return;QUrl newUrl = QUrl::fromUserInput(url);if(!newUrl.isValid())return;QString tempDir = ui->lineEdit_2->text().trimmed();if(tempDir.isEmpty())return;QString fullFileName = tempDir+newUrl.fileName();if(QFile::exists(fullFileName))QFile::remove(fullFileName);downFile = new QFile(fullFileName);if(!downFile->open(QIODevice::WriteOnly))return;ui->pushButton->setEnabled(false);reply = networkManager.get(QNetworkRequest(newUrl));connect(reply,&QNetworkReply::finished,this,&http::on_finished);connect(reply,&QNetworkReply::readyRead,this,&http::on_readyRead);connect(reply,&QNetworkReply::downloadProgress,this,&http::downLoadProgress);}

结果:

点击缺省路径,保存文件

在地址栏输入下载的文件地址,例:下载网易云音乐logo图片,地址如下

http://p3.music.126.net/tBTNafgjNnTL1KlZMt7lVA==/18885211718935735.jpg

原文链接:https://blog.csdn.net/wzz953200463/article/details/123858775 

http://www.lryc.cn/news/159298.html

相关文章:

  • SpringBoot-配置优先级
  • 科普初步了解大模型
  • Nginx 和 网关的关系是什么
  • 解决springboot项目中的groupId、package或路径的混淆问题
  • Vmware 网络恢复断网和连接
  • 学生来看!如何白嫖内网穿透?点进来!
  • C++中的stack和queue
  • Ubuntu-22.04通过RDP协议连接远程桌面
  • 20230908java面经整理
  • uniapp 开发App 网络异常如何处理
  • docker安装常用软件
  • CocosCreator3.8研究笔记(五)CocosCreator 脚本说明及使用(下)
  • Adobe Acrobat Reader界面改版 - 解决方案
  • 实用调试技巧(2)
  • 海外ASO优化之如何优化游戏应用
  • SpringMVC: Java Web应用开发的框架之选
  • 【华为设备升级】AR路由器升级设备软件示例
  • Dataset 的一些 Java api 操作
  • Vue + Element UI 前端篇(十一):第三方图标库
  • HDFS:Hadoop文件系统(HDFS)
  • SpringMvc--综合案例
  • 工业4.0时代生产系统对接集成优势,MES和ERP专业一体化管理-亿发
  • IT运维监控系统和网络运维一样吗
  • c语言flag的使用
  • docker push image harbor http 镜像
  • 羊城杯2023 部分wp
  • 解读Java对Execl读取数据
  • RHCE——十七、文本搜索工具-grep、正则表达式
  • 小程序实现摄像头拍照 + 水印绘制
  • SpringMVC:从入门到精通,7篇系列篇带你全面掌握--三.使用SpringMVC完成增删改查