QT網絡編程http之url下載

創建一個mainwind類Application

mainwind.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtNetwork>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void startRequest(QUrl url);//請求鏈接
private slots:
    void on_pushButton_clicked();//下載按鈕的單擊事件槽函數
    void httpFinished();//完成下載後的處理
    void httpReadyRead();//接收到數據時的處理
    void updateDataReadProgress(qint64, qint64); //更新進度條
private:
    Ui::MainWindow *ui;
    QNetworkAccessManager *manager;
    QNetworkReply *reply;
    QUrl url;   //存儲網絡地址
    QFile *file;  //文件指針
};
#endif // MAINWINDOW_H

在mainwind.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTextCodec>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    manager=new QNetworkAccessManager(this);
    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(updateDataReadProgress(qint64, qint64)));
       connect(reply, SIGNAL(finished()), this, SLOT(httpFinished()));
}
//判斷是否創建了文件,如果是則讀取返回的所有數據,然後寫入文件。
//該文件是在下載按鈕單擊信號槽中創建並打開的。
void MainWindow::updateDataReadProgress(qint64 bytesRead, qint64 totalBytes)
{
    ui->progressBar->setMaximum(totalBytes);
    ui->progressBar->setValue(bytesRead);
}
//當下載後,重新隱藏進度條,然後刪除reply和服了對象。
void MainWindow::on_pushButton_clicked()
{
        url = ui->lineEdit->text();//從lineEdit中獲取信息
        QFileInfo info(url.path());//從url中獲取path信息
        QString fileName(info.fileName());//從url中獲取filename
        if (fileName.isEmpty()) fileName = "index.html";//判斷文件名是否存在,如果爲空將filename設置爲默認頁
        file = new QFile(fileName);//根據url中的文件名創建url對像
        if(!file->open(QIODevice::WriteOnly))
        {
            qDebug() << "file open error";
            delete file;
            file = 0;
            return;
         }
        qDebug()<<"url"<<url;
        startRequest(url);//開始請求url
        ui->progressBar->setValue(0);//設置進度條只爲0
        ui->progressBar->show();//顯示進度條
}
void MainWindow::httpFinished()
{
        ui->progressBar->hide();//數據傳輸完成隱藏進度條
        file->flush();//刷新數據緩衝區
        file->close();//關閉文件描述符
        reply->deleteLater();//釋放relay對象
        reply = 0;
        delete file;
        file = 0;
}
void MainWindow::httpReadyRead()
{
    if (file) file->write(reply->readAll());
}

執行編譯運行後可下載url鏈接http://p4.so.qhmsg.com/t010d8cda7193fa4099.jpg如下爲圖片下載鏈接運行效果

下載結果

快獲取捏的妹子吧(@——@)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章