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_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()-);
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
ui->progressBar->setMinimum();
}

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()-);
QString data = "下载成功--" + filename;
ui->textEdit->setText(data);
}

void Widget::doProcessError(QNetworkReply::NetworkError code)
{
qDebug() << code;
}

Widget::~Widget()
{
delete ui;
}

5.widget.ui文件

QT--HTTP文件下载器的更多相关文章

  1. Unity3D 更新文件下载器

    使用说明: 1)远端更新服务器目录 Package |----list.txt |----a.bundle |----b.bundle 2)list.txt是更新列表文件 格式是 a.bundle|r ...

  2. 第六章 Qt布局管理器Layout

    第六章 Qt布局管理器Layout 大家有没有发现一个现象,我们放置一个组件,给组件最原始的定位是给出这个控件的坐标和宽高值,这样Qt就知道这个组件的位置.当用户改变窗口的大小,组件还静静地呆在原来的 ...

  3. 初识Qt布局管理器

    Qt布局管理器的类有4种,它们分别为QHBoxLayout.QVBoxLayout.QGridLayout和QStackLayout.其中,QHBoxLayout实现水平布局,QVBoxLayout实 ...

  4. tcp案例之文件下载器

    文件下载器客户端 import socket def main(): # 1.创建一个tcp socket tcp_client_socket=socket.socket(socket.AF_INET ...

  5. python实现tcp文件下载器

    服务器端代码 import socket import os import threading # 处理客户端请求下载文件的操作(从主线程提出来的代码) def deal_client_request ...

  6. 使用网络TCP搭建一个简单文件下载器

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目介绍 二丶服务器Server 三丶测试TCP server服务器 四丶客户端Client 五丶测试客户端向服务器下载 ...

  7. {每日一题}:tcp协议实现简单的文件下载器(单任务版)

    文件下载器客户端 这个版本的只是为了方便回顾一下TCP客服端,服务端的创建流程,缺点就是  服务器一次只能让一个人访问下载,过两个写个使用面向对象写一个多线程版的强化一下. from socket i ...

  8. Qt——布局管理器

    教程地址 运行截图: 代码: #include "mainwindow.h" #include <QApplication> #include <QHBoxLay ...

  9. Qt编写视频播放器(vlc内核)

    在研究qt+vlc的过程中,就想直接做个播放器用于独立的项目,vlc还支持硬件加速,不过部分电脑硬件不支持除外.用vlc的内核写播放器就是快,直接调用api就行,逻辑处理和ui展示基本上分分钟的事情, ...

随机推荐

  1. 【第二版】高仿Android网易云音乐企业级项目实战课程介绍

    这是一门付费Android项目课程,我们只做付费课程:同时也感谢大家的支持. 这一节,对本课程做一个简单介绍,以及放一些项目效果图,如果想直接查看项目视频演示,可以直接在腾讯课堂查看[高仿Androi ...

  2. Android: Unable to resolve dependency for ':app@debugUnitTest/compileClasspath':

    我按照ExoPlayer的github指引添加 implementation 'com.google.android.exoplayer:exoplayer:2.X.X' 发现根本run不起来,并报错 ...

  3. 安装包RPM包或源码包

    RPM工具 # mount /dev/cdrom /mnt     挂载光盘 # rpm     软件包管理器 -i     安装(需要安装包完整名称) -v    可视化 -h    显示安装进度 ...

  4. vue中实现百度地图

    1.项目根目录下下载百度地图插件 npm install vue-baidu-map –save 2.在首页index.html中引入百度地图: <script type="text/ ...

  5. SpringCloud服务过滤filter

    一.目录展示 二.application.yml配置文件 三.MyZuulFilter package com.zn.filter; import com.netflix.zuul.ZuulFilte ...

  6. JqueryOn绑定事件方法介绍

    JqueryOn绑定事件方法介绍 1. 简介 (1) On()方法在被选及子元素上添加一个或多个事件处理程序 (2) 在jquery 版本1.7起,on()方法是bind(),live()和deleg ...

  7. Auto入门 之 常用概念

    1.SEMI (Semiconductor Equipment And Materials International)  国际半导体设备与材料产业协会 2.SECS SECS协议是基于RS-232或 ...

  8. A Code Farmer‘s Entertainment

    My guitar playing and singing 码农的自娱自乐 https://v.youku.com/v_show/id_XNDM4NTY1MTEwNA==.html?spm=a2hzp ...

  9. 使用PowerShell实现服务器常用软件的无人值守安装

    操作系统:windows server 2016 , windows server 2019 软件环境: 类型 名称 版本   系统功能 TelnetClien       IIS   启用Asp.n ...

  10. (办公)记事本_通过xshell连接Liunx服务器

    任务:需要用xshell连接到Liunx服务器,装配环境,放置项目,查看日志,以后就要做,磁盘扩容,均衡负载,以及病毒错误. 第一步,先连接上: 1.xshell新建会话,刚才买的liunx的公网地址 ...