QT--HTTP文件下载器
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文件下载器的更多相关文章
- Unity3D 更新文件下载器
使用说明: 1)远端更新服务器目录 Package |----list.txt |----a.bundle |----b.bundle 2)list.txt是更新列表文件 格式是 a.bundle|r ...
- 第六章 Qt布局管理器Layout
第六章 Qt布局管理器Layout 大家有没有发现一个现象,我们放置一个组件,给组件最原始的定位是给出这个控件的坐标和宽高值,这样Qt就知道这个组件的位置.当用户改变窗口的大小,组件还静静地呆在原来的 ...
- 初识Qt布局管理器
Qt布局管理器的类有4种,它们分别为QHBoxLayout.QVBoxLayout.QGridLayout和QStackLayout.其中,QHBoxLayout实现水平布局,QVBoxLayout实 ...
- tcp案例之文件下载器
文件下载器客户端 import socket def main(): # 1.创建一个tcp socket tcp_client_socket=socket.socket(socket.AF_INET ...
- python实现tcp文件下载器
服务器端代码 import socket import os import threading # 处理客户端请求下载文件的操作(从主线程提出来的代码) def deal_client_request ...
- 使用网络TCP搭建一个简单文件下载器
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目介绍 二丶服务器Server 三丶测试TCP server服务器 四丶客户端Client 五丶测试客户端向服务器下载 ...
- {每日一题}:tcp协议实现简单的文件下载器(单任务版)
文件下载器客户端 这个版本的只是为了方便回顾一下TCP客服端,服务端的创建流程,缺点就是 服务器一次只能让一个人访问下载,过两个写个使用面向对象写一个多线程版的强化一下. from socket i ...
- Qt——布局管理器
教程地址 运行截图: 代码: #include "mainwindow.h" #include <QApplication> #include <QHBoxLay ...
- Qt编写视频播放器(vlc内核)
在研究qt+vlc的过程中,就想直接做个播放器用于独立的项目,vlc还支持硬件加速,不过部分电脑硬件不支持除外.用vlc的内核写播放器就是快,直接调用api就行,逻辑处理和ui展示基本上分分钟的事情, ...
随机推荐
- imageRectForContentRect,titleRectForContentRect,contentRectForBounds,imageRectForContentRect什么时候调用
UIButton的布局顺序细节 什么时候调用imageRectForContentRect,titleRectForContentRect,contentRectForBounds,imageRect ...
- Dynamics 365中的Client API form context (formContext)
适用于Dynamics 365 for Customer Engagement apps 9.x版本. 本文是一篇翻译,原文来源是微软官方文档. 本文链接:https://www.cnblogs.co ...
- Nmap参数详解(含扫描参数原理解释)
语法结构:nmap [Scan Type(s)] [Options] {target specification} 端口状态介绍 open:确定端口开放,可达 closed :关闭的端口对于nmap也 ...
- Python 学习笔记(基础篇)
背景:今年开始搞 Data science ,学了 python 小半年,但一直没时间整理整理.这篇文章很基础,就是根据廖雪峰的 python 教程 整理了一下基础知识,再加上自己的一些拓展,方便自己 ...
- jQuery基础之获取和设置标签元素属性
jQuery基础之获取和设置标签元素属性方法,如下图: 代码实现: <script src="JS/jquery-1.12.4.min.js"></script& ...
- Toggle the WinForms Ribbon Interface 切换 WinForms 功能区界面
In this lesson, you will learn how to enable/disable the Ribbon User Interface in your application. ...
- Filter Lookup Editor Data Source 筛选器查找编辑器数据源
In this lesson, you will learn how to filter the data displayed by a lookup editor. This editor is s ...
- PHP 利用PHPExcel到处数据到Excel;还有导出数据乱码的解决方案。
直接贴代码吧 PHP版本5.6.38 mysql版本5.0 //连接数据库 $mysql_server_name = "*.*.*.*"; $mysql_username=&quo ...
- ElementUi中el-table分页效果
现实的场景中很经常遇到表格el-table数据过多,为了更好的用户体验,所以我们需要用到分页,一般分页可以视数据量的大小可分为前端控制和后端控制. 先看下效果(已做脱敏处理) 图1 前端el-tabl ...
- MySQL5.6与MySQL5.7安装的区别
一.MySQL5.6与MySQL5.7安装的区别 1.cmake的时候加入了boost 下载boost.org 2.初始化时 cd /application/mysql/bin/mysql 使用mys ...