当前位置: 首页 > 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 

相关文章:

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

1.常用到的类 QNetworkAccessManager类用于协调网络操作&#xff0c;负责发送网络请求&#xff0c;创建网络响应 QNetworkReply类表示网络请求的响应。在QNetworkAccessManager发送一个网络请求后创建一个网络响应。它提供了以下信号&#xff1a; finished()&#xff1a;完成…...

SpringBoot-配置优先级

配置 SpringBoot项目支持的三种格式的配置文件 application.properties&#xff1a;这是最常用的配置文件类型&#xff0c;使用键值对的形式来配置应用程序的属性。可以在该文件中配置应用程序的端口号、数据库连接信息、日志级别等。 application.yml&#xff1a;这是一种更…...

科普初步了解大模型

目录 一、大模型的简单认知 &#xff08;一&#xff09;官方定义 &#xff08;二&#xff09;聚焦到大语言模型 &#xff08;三&#xff09;大模型的应用举例 二、如何得到大模型 &#xff08;一&#xff09;整体的一般步骤 训练自己的模型 使用预训练模型 选择适当的…...

Nginx 和 网关的关系是什么

分析&回答 Nginx也可以实现网关&#xff0c;可以实现对api接口的拦截&#xff0c;负载均衡、反向代理、请求过滤等。网关功能可以进行扩展&#xff0c;比如&#xff1a;安全控制&#xff0c;统一异常处理&#xff0c;XXS,SQL注入等&#xff1b;权限控制&#xff0c;黑白名…...

解决springboot项目中的groupId、package或路径的混淆问题

对于像我一样喜欢跳跃着学习的聪明人来说&#xff0c;肯定要学springboot&#xff0c;什么sevlet、maven、java基础&#xff0c;都太老土了&#xff0c;用不到就不学。所以古代的聪明人有句话叫“书到用时方恨少”&#xff0c;测试开源项目时&#xff0c;编译总是报错&#xff…...

Vmware 网络恢复断网和连接

如果你的 虚拟机无法联网了&#xff0c;比如&#xff1a; vmware 无法将网络更改为桥接状态: 没有未桥接的主机网络适配器 等各种稀奇古怪的问题&#xff1b; 按照下面操作 还远默认设置 包你解决各种问题&#xff01;...

学生来看!如何白嫖内网穿透?点进来!

文章目录 前言本教程解决的问题是&#xff1a;按照本教程方法操作后&#xff0c;达到的效果是前排提醒&#xff1a; 1 搭建虚拟机1.1 下载文件vmvare虚拟机安装包1.2 安装VMware虚拟机&#xff1a;1.3 解压虚拟机文件1.4 虚拟机初始化1.5 没有搜索到解决方式&#xff1a;1.6 虚…...

C++中的stack和queue

文章目录 1. stack的介绍和使用1.1 stack的介绍1.2 stack的使用 2. queue的介绍和使用2.1 queue的介绍2.2 queue的使用 3 priority_queue的介绍和使用3.1 priority_queue的介绍3.2 priority_queue的使用 4. 容器适配器4.1 什么是适配器4.2 STL标准库中stack和queue的底层结构4.…...

Ubuntu-22.04通过RDP协议连接远程桌面

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、RDP是什么&#xff1f;二、配置1.打开远程桌面功能2.验证服务3.防火墙配置4.测试效果 总结 前言 由于一些特殊需要&#xff0c;我需要通过远程桌面连接到U…...

20230908java面经整理

1.cpp和java的区别 cpp可以多重继承&#xff0c;对表java中的实现多个接口 cpp支持运算符重载、goto、默认函数参数 cpp自动强转&#xff0c;导致不安全&#xff1b;java必须显式强转 java提供垃圾回收机制&#xff0c;自动管理内存分配&#xff0c;当gc要释放无用对象时调用f…...

uniapp 开发App 网络异常如何处理

我对该问题思考的不是很清楚&#xff0c;目前只想到了基本的解决方案 第一、客户端的网络异常&#xff08;断网&#xff09; 1. 断网情况 一定要弹出信息提示&#xff0c;目前最好的解决方式就是在uni.request封装的统一方法中写提示 //1. 封装的网络请求 async function se…...

docker安装常用软件

Linux系统安装docker请参考&#xff1a;https://mp.csdn.net/mp_blog/creation/editor/128176825 docker安装mysql 1、拉镜像&#xff1a;docker pull mysql:8.0.26 2、创建数据目录&#xff1a; mkdir -p /mnt/data/mysql/data mkdir -p /mnt/data/mysql/logs mkdir -p /mn…...

CocosCreator3.8研究笔记(五)CocosCreator 脚本说明及使用(下)

在Cocos Creator中&#xff0c;脚本代码文件分为模块和插件两种方式&#xff1a; 模块一般就是项目的脚本&#xff0c;包含项目中创建的代码、引擎模块、第三方模块。 插件脚本&#xff0c;是指从 Cocos Creator 属性检查器中导入的插件&#xff0c;一般是引入第三方引入库文件…...

Adobe Acrobat Reader界面改版 - 解决方案

问题 日期&#xff1a;2023年9月 Adobe Acrobat Reader下文简称Adobe PDF Reader&#xff0c;此软件会自动进行更新&#xff0c;当版本更新至2023.003.20284版本后。 软件UI界面会大改版&#xff1a;书签页变成了右边、工具栏变到了左边、缩放按钮变到了右下角&#xff0c;如…...

实用调试技巧(2)

文章目录 6. 如何写出好&#xff08;易于调试&#xff09;的代码6.1 优秀的代码&#xff1a;6.2 示范&#xff1a;6.3 const的作用 7. 编程常见的错误7.1 编译型错误7.2 链接型错误7.3 运行时错误 附&#xff1a; 6. 如何写出好&#xff08;易于调试&#xff09;的代码 6.1 优…...

海外ASO优化之如何优化游戏应用

如果我们发布了一款手机游戏或者管理了一款手机游戏&#xff0c;那么需要确保我们的手机游戏对合适的人可见&#xff0c;目的是增加应用的下载量。 1、优化游戏元数据的关键词。 Apple和Google在应用商店中为我们提供有限的空间&#xff0c;来描述手机游戏及其优势。我们需要使…...

SpringMVC: Java Web应用开发的框架之选

引言 在当今的软件开发领域中&#xff0c;Web应用的需求不断增长。为了满足这种需求&#xff0c;各种Web框架应运而生。其中&#xff0c;SpringMVC作为一种优秀的Java Web框架&#xff0c;受到广泛关注和使用。本文将以文章的形式给您讲解SpringMVC的重要概念、工作原理和核心…...

【华为设备升级】AR路由器升级设备软件示例

升级设备软件示例 通过介绍设备升级的具体步骤&#xff0c;帮助用户顺利完成系统设备升级。 组网需求 设备当前系统软件版本已经不能满足用户需要&#xff0c;用户需要更大的规格和部署更多的特性&#xff0c;此时用户需要对系统软件进行升级。 如图1所示&#xff0c;网络中的某…...

Dataset 的一些 Java api 操作

文章目录 一、使用 Java API 和 JavaRDD<Row> 在 Spark SQL 中向数据帧添加新列二、foreachPartition 遍历 Dataset三、Dataset 自定义 Partitioner四、Dataset 重分区并且获取分区数 一、使用 Java API 和 JavaRDD 在 Spark SQL 中向数据帧添加新列 在应用 mapPartition…...

Vue + Element UI 前端篇(十一):第三方图标库

Vue Element UI 实现权限管理系统 前端篇&#xff08;十一&#xff09;&#xff1a;第三方图标库 使用第三方图标库 用过Elment的同鞋都知道&#xff0c;Element UI提供的字体图符少之又少&#xff0c;实在是不够用啊&#xff0c;幸好现在有不少丰富的第三方图标库可用&…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...

基于Uniapp的HarmonyOS 5.0体育应用开发攻略

一、技术架构设计 1.混合开发框架选型 &#xff08;1&#xff09;使用Uniapp 3.8版本支持ArkTS编译 &#xff08;2&#xff09;通过uni-harmony插件调用原生能力 &#xff08;3&#xff09;分层架构设计&#xff1a; graph TDA[UI层] -->|Vue语法| B(Uniapp框架)B --&g…...