mainwindow.h
/**
* 书本:【Qt5开发及实例】
* 功能:网页浏览
* 文件:mainwindow.h
* 时间:2015年2月7日14:39:33
* 作者:cutter_point
*/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QUrl>
namespace Ui {
class MainWindow;
}
class QNetworkReply;
class QNetworkAccessManager;
class QFile;
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void startRequest(QUrl url);
private:
Ui::MainWindow *ui;
QNetworkAccessManager *manager;
QNetworkReply *reply;
QUrl url;
QFile *file;
private slots: //私有槽函数
void replyFinished(QNetworkReply *);
void httpFinished();
void httpReadyRead();
void updateDateReadProgress(qint64, qint64);
void on_pushButton_clicked();
};
#endif // MAINWINDOW_H
mainwindow.cpp
/**
* 书本:【Qt5开发及实例】
* 功能:网页浏览
* 文件:mainwindow.cpp
* 时间:2015年2月7日14:39:33
* 作者:cutter_point
*/
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtNetwork>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
manager = new QNetworkAccessManager(this); //用来发送网络请求和接收应答
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); //应答结束的时候发送这个信号
manager->get(QNetworkRequest(QUrl("http://www.baidu.com"))); //发送网络请求,get返回一个QNetworkReply对象
ui->progressBar->hide(); //先把进度条隐藏
}
//void replyFinished(QNetworkReply *);
void MainWindow::replyFinished(QNetworkReply *reply)
{
QString all = reply->readAll();
ui->textBrowser->setText(all);
reply->deleteLater(); //删除reply对象
}
//void startRequest(QUrl url);
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(updateDateReadProgress(qint64,qint64))); //下载更新的时候发送前面那个信号
connect(reply, SIGNAL(finished()), this, SLOT(httpFinished())); //应答结束
}
//void httpReadyRead();
void MainWindow::httpReadyRead()
{
if(file)
file->write(reply->readAll());
}
//void updateDateReadProgress(qint64, qint64);
void MainWindow::updateDateReadProgress(qint64 bytesRead, qint64 totalBytes)
{
ui->progressBar->setMaximum(totalBytes);
ui->progressBar->setValue(bytesRead); //设置进度条
}
//void httpFinished();
void MainWindow::httpFinished()
{
ui->progressBar->hide();
file->flush();
file->close();
reply->deleteLater();
reply = 0;
delete file;
file = 0; //下载完成之后
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
url = ui->lineEdit->text();
QFileInfo info(url.path());
QString fileName(info.fileName());
file = new QFile(fileName);
if(!file->open(QIODevice::WriteOnly))
{
qDebug()<<"file open error";
delete file;
file = 0;
return;
}
startRequest(url);
ui->progressBar->setValue(0);
ui->progressBar->show();
}
界面运行浏览: