創建一個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如下爲圖片下載鏈接運行效果
下載結果
快獲取捏的妹子吧(@——@)