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. JsonPath基本用法

    JsonPath基本用法 本文主要介绍JsonPath的基本语法,并演示如何在Newtonsoft.Json中进行使用. JsonPath的来源 看它的名字你就能知道,这家伙和JSON文档有关系,正如 ...

  2. Path Manipulation 路径操作

  3. Java8新特性之接口defualt,static方法

    简介 作用 Java8中接口引入了defualt,static两种方法提供默认实现,彻底打破了接口不能有默认实现的规定 static 让接口类似于工具类,提供一些静态方法 static方法不会被子类继 ...

  4. LinqDB 查询数据库

    LinqDB数据库查询数据,还是很方便的. 1. 添加Entity数据实体类 方便之后映射操作 /// <summary> /// 课件 /// </summary> [Dat ...

  5. JS---DOM---元素相关的操作方法

    1. 追加子元素 my$("dv").appendChild(obj); 2. 把新的子元素插入到第一个子元素的前面 my$("dv").insertBefor ...

  6. Dynamics 365客户端编程示例:两个选项集字段的联动

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  7. 表空间相关SQL

    --查表空间使用率情况(含临时表空间)SELECT D.TABLESPACE_NAME "Name", D.STATUS "Status", TO_CHAR(N ...

  8. js设置定时执行

    具体语法参考:https://www.runoob.com/jsref/met-win-setinterval.html var timer = window.setInterval(function ...

  9. ORA-00904:"WM_CONCAT":标识符无效

    原创 Oracle 作者:Root__Liu 时间:2019-11-21 18:49:27  514  0 今天客户现场业务甩给我一个报错让处理,ora-00904:"WM_CONCAT&q ...

  10. OOAD 面向对象的分析与设计

      OOAD  面向对象的分析与设计            OOA-----分析阶段(针对业务问题清晰视图, 列出系统完成任务,  整理业务的公共词汇,  列出解决业务的解决方法)         O ...