QT http练习——创建一个能够下载URL资源的UI程序,并保存到本地指定目录下

#include 
   
   
    
    
#include "mainwindow.h"

int main(int argc, char *argv[])
{

    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    
    return a.exec();

}#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
    
    
     
     
#include 
     
     
      
      

//①前置声明
class QFile;
class QNetworkReply;
class QNetworkAccessManager;


namespace Ui {

    class MainWindow;

}


class MainWindow : public QMainWindow

{

    Q_OBJECT
public:

    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void startRequest(QUrl url);         //声明一个公有的响应函数接收URL

private slots:

    //③声明槽

    void httpFinished();
    void httpReadyRead();
    void updateDataProgress(qint64,qint64);
    void on_pushButton_clicked();

private:

    //②定义私有变量
    QNetworkAccessManager *manager;
    Ui::MainWindow *ui;
    QNetworkReply *reply;
    QUrl url;
    QFile *file;
};


#endif // MAINWINDOW_H#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 
      
      
       
       
#include 
       
       
         #include 
        
          #include 
         
           MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); manager = new QNetworkAccessManager(this); //创建一个网络管理实例manager ui->progressBar->hide(); //隐藏进度条 } MainWindow::~MainWindow() { delete ui; } void MainWindow::startRequest(QUrl url) { reply = manager->get(QNetworkRequest(url)); connect(reply,SIGNAL(readyRead()),this,SLOT(httpReadyRead())); connect(reply,SIGNAL(downloadProgress(qint64,qint64)),this,SLOT(updateDataProgress(qint64,qint64))); connect(reply,SIGNAL(finished()),this,SLOT(httpFinished())); } //下载完成,隐藏进度条,关闭文件 void MainWindow::httpFinished() { ui->progressBar->hide(); file->flush(); file->close(); reply->deleteLater(); reply=0; delete file; file=0; } //读取准备好,进行读取文件到file中 void MainWindow::httpReadyRead() { if(file) file->write(reply->readAll()); } //下载过程中,激活进度条动态显示 void MainWindow::updateDataProgress(qint64 bytesRead, qint64 totalBytes) { ui->progressBar->setMaximum(totalBytes); ui->progressBar->setValue(bytesRead); } void MainWindow::on_pushButton_clicked() { QDir *temp = new QDir; //获取QDir的地址,不是复制一个QDir //判断文件夹是否存在 bool exist = temp->exists("./download"); if(exist) QMessageBox::warning(this,tr("creat folder"),tr("The folder is exist!")); else { bool ok = temp->mkdir("./download"); //当文件夹不存在时进行创建 if(ok) QMessageBox::warning(this,tr("creat folder"),tr("Creat the folder successful")); } //从lineEdit获取URL地址 url = ui->lineEdit->text(); QFileInfo info=(url.path()); qDebug()< 
          
            open(QIODevice::WriteOnly)) { qDebug()<<"file open error"; delete file; file=0; return; } startRequest(url); //获取url ui->progressBar->setValue(0); //设置进度条值从0开始 ui->progressBar->show(); //显示进度条 } 
           
          
         
       
      
      
     
     
    
    
   
   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值