1、新建一个Qt Gui应用,项目名称为http,基类选择为QMainWindow,类名设置为MainWindow。

2、在http.pro文件中的QT  += core gui后添加\ network,或者直接添加QT  += network。

3、在mainwindow.ui文件中分别拖入label控件、lineEdit控件、pushButton控件以及progressBar控件,如下。

4、在mainwindow.h头文件中添加以下代码,同时添加#include<QtNetwork>

 public:
void startRequest(QUrl url); private:
QNetworkReply *reply;
QUrl url;//存储网络地址
QFile *file;//文件指针 private slots:
void on_pushButton_clicked();
void httpFinished();
void httpReadyRead();
void updateDataReadProgress(qint64, qint64);

5、在mainwindow.cpp源文件的构造函数中添加代码

  ui->progressBar->hide();

同时,在mainwindow.cpp源文件中添加以下函数代码

 void MainWindow::on_pushButton_clicked()
{
url = ui->lineEdit->text();
QFileInfo info(url.path());
QString fileName(info.fileName());
if (fileName.isEmpty()) fileName = "index.html";
file = new QFile(fileName);
if(!file->open(QIODevice::WriteOnly))//打开成功返回true,否则返回false
{
qDebug() << "file open error";
delete file;
file = ;
return;
}
startRequest(url);
ui->progressBar->setValue();
ui->progressBar->show();
} void MainWindow::startRequest(QUrl url)
{
QNetworkAccessManager *manager;
manager = new QNetworkAccessManager(this);
reply = manager->get(QNetworkRequest(url));
connect(reply, SIGNAL(readyRead()), this, SLOT(httpReadyRead()));//readyRead()信号继承自QIODevice类,每当有新的数据可以读取时,都会发射该信号
connect(reply, SIGNAL(downloadProgress(qint64, qint64)), this, SLOT(updateDataReadProgress(qint64, qint64)));//每当网络请求的下载进度更新时都会发射downloadProgress()信号
connect(reply, SIGNAL(finished()), this, SLOT(httpFinished()));//每当应答处理结束时,都会发射finished()信号
} void MainWindow::httpReadyRead()
{
if (file)
file->write(reply->readAll());//如果创建了文件,则读取返回的所有数据,然后写入到文件。
} void MainWindow::updateDataReadProgress(qint64 bytesRead, qint64 totalBytes)
{
ui->progressBar->setMaximum(totalBytes);
ui->progressBar->setValue(bytesRead);
} void MainWindow::httpFinished()
{
ui->progressBar->hide();
file->flush(); //文件刷新
file->close();//文件关闭
reply->deleteLater();
reply = ;
delete file;
file = ;
}

6、运行,输入文件下载地址,点击下载后界面显示如下

7、文件自动下载到工程根目录下

初识Qt文件下载的更多相关文章

  1. QT征程之初识qt

    下载 https://www.qt.io/cn/download-open-source/     下载QT离线安装包 Qt 5.5.1 for Linux 32-bit (546 MB) (info ...

  2. 初识---Qt解析XML文件(QDomDocument)

    关于XML及其使用场景不在此多做介绍,今天主要介绍Qt中对于XML的解析.QtXml模块提供了一个读写XML文件的流,解析方法包含DOM和SAX,两者的区别是什么呢?  DOM(Document Ob ...

  3. 初识Qt Creator

    (1).Qt Creator是一个跨平台的.完整的Qt集成开发环境,其中包括了高级C++代码编辑器.项目和生成管理工具,下载地址http://download.qt.io/archive/qt/: ( ...

  4. Qt入门(1)——初识Qt

    Qt是一个跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器.Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta ...

  5. 初识QT

    前言:这是写给纯小白看的文章,大神可以自行绕道. QT的优势(摘自360百科): Qt支持下列操作系统: Microsoft Windows 95/98, Microsoft Windows NT, ...

  6. 1初识QT

    创建程序步骤: 打开Qt Creator 界面选择 New Project或者选择菜单栏 [文件]-[新建文件或项目]菜单项 弹出New Project对话框,选择Qt Widgets Applica ...

  7. 初识Qt简单动画

    Qt提供了类QPropertyAnimation来实现图片的一些简单的动画操作效果. 1.新建一个Qt空项目,同时添加资源文件,并在资源文件中添加图片路径.之后在main.cpp函数中添加以下代码 # ...

  8. 初识Qt基于http协议网页浏览

    1.新建一个Qt Gui应用,项目名称为http,基类选择为QMainWindow,类名设置为MainWindow. 2.在http.pro文件中的QT  += core gui后添加\ networ ...

  9. 初识Qt涂鸦板绘制

    1.新建一个Qt Gui应用,项目名称为myPalette,基类选择为QMainWindow,类名设置为MainWindow. 2.在mainwindow.h头文件中添加以下代码,同时添加#inclu ...

随机推荐

  1. WPF流程图制作系列相关基础一

    WPF流程图制作相关基础一   需求是要通过wpf开发流程图,这个流程图是用户自行拖动配置.   使用过流程图的话,应该大体能想象出流程图拖动配置的样子.这里主要会涉及到的技术知识点就是 wpf拖动相 ...

  2. xamarin.android 实现 Activity 底部弹出对话框菜单

    Resources/drawable 下新增如下文件: push_bottom_in.xml <?xml version="1.0" encoding="utf-8 ...

  3. 小tip: base64:URL背景图片与web页面性能优化——张鑫旭

    一.base64百科 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息. 某人: 唉,我彻底废柴了,为何上面明明是中文,洒家却看不懂嘞,为什 ...

  4. c#无边窗体实现移动的两种方式

    转载:http://blog.csdn.net/dxsh126/article/details/2940226 首先,要用到一个WimdowsAPI函数,因此必须引入 using System.Run ...

  5. pipenv虚拟环境和依赖管理工具

    一.pipenv用来干嘛 每门编程语言发展到现在,都需要一个工具,能够管理代码版本和控制生产环境和测试环境依赖一致的,这样减少不可代码上线之后不可控的问题出现.Php有Composer.Nodejs有 ...

  6. 2017年5月22日 HTML基础知识(一)

    一.Html 结构 1.1.HTML基本文档格式—<html> 标记 —<html>文档的头部好和主体内容 </html>  根标记 —<head> 文 ...

  7. 手动解除联合的ArcGIS Server

    ArcGIS Server可以通过和Portal联合,组建WebGIS系统. 假如已经联合的ArcGIS Server已经无法访问,例如服务器宕机了,或者网络断开了.需要手动解除联合的ArcGIS S ...

  8. for循环内嵌套finally使用的意外获得

    在for循环中有continue和break,无论执行continue还是break   finally的逻辑都会执行,原本以为是不执行的 格式 for (int i = 0; i < 3; i ...

  9. npm与gulp的使用

    这边将工作中使用的npm以及gulp的一些方法做了整理,方便以后查阅,至少不用去麻烦度娘了~ A.npm的使用: 1.在你所需要的文件夹里面初始化npm-->  npm init -y    - ...

  10. Sqlserver2014 迁移数据库

    由于当初安装sqlserver 的时候选择默认安装的路径,导致现在c盘爆满,安装不了其它软件.因此想到了迁移数据库,网上搜索了一些简介,但是缺少一些步骤,导致数据库附加的时候失败.现总结如下: 1.将 ...