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文件

最新文章

  1. 微信快速开发框架(六)-- 微信快速开发框架(WXPP QuickFramework)V2.0版本上线--源码已更新至github
  2. 成都开发一个app大概好多钱?
  3. 【转】Reactor与Proactor两种模式区别
  4. Nagios全方位告警接入-电话/微信/短信都支持
  5. JavaScript--DOM事件(笔记)
  6. 2016年 IT 趋势大预测!
  7. 关于fork( )函数父子进程返回值的问题
  8. Cross-origin resource sharing--reference
  9. POJ 2209 The King#贪心
  10. 人工智能 tensorflow框架--&gt;简介及安装01
  11. 2017年编程语言排行榜Top10,第一名是?
  12. 如何在Windows下用cpu模式跑通py-faster-rcnn 的demo.py
  13. c++(排序二叉树)
  14. POJ-2586 Y2K Accounting Bug贪心,区间盈利
  15. 读取控制器PHP代码文件,并分析数据存到数据库,再重新读出生成PHP文件
  16. 最新案例铁血军事手机客户端(IOS &amp; Android)
  17. Winsock版本的“hello world!”
  18. 解读socketserver之Tcpserver
  19. 指定Android Studio编译工程时的源文件编码
  20. TMS Grid

热门文章

  1. 【iOS bug记录】UICollectionviewCell刷新变得这么莫名其妙?
  2. Android 基于ksoap2的webservice请求的学习
  3. Charles抓包iPhone注意点以及SSL Proxying enabled for this host
  4. 利用FOR XML PATH行转列(根据某字段分组,多行数据转成一行,并用逗号隔开)
  5. BASH Shell 文件管理
  6. Jmeter脚本参数化和正则匹配
  7. go 中recover捕获异常
  8. Prism_Event Aggregator(4)
  9. Dynamics CRM 2013开始推出的服务器端同步来配置邮件服务
  10. JS 算数