四十二、Qt网络(二)HTTP编程
HTTP即超文本传输协议,它是一种文件传输协议。这一节中我们将讲解如何利用HTTP从网站上下载文件。
下载网页:
private:
QNetworkAccessManager *manager;
private slots:
void replyFinished(QNetworkReply *);
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
manager = new QNetworkAccessManager(this); //新建QNetworkAccessManager对象
connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl("http://www.yafeilinux.com"))); //发送请求
}
void Widget::replyFinished(QNetworkReply *reply) //当回复结束后
{
QTextCodec *codec = QTextCodec::codecForName("utf8");
QString all = codec->toUnicode(reply->readAll());
// ui->textBrowser->setText(all);
ui->textBrowser->setHtml(all);
reply->deleteLater(); //最后要释放reply对象
}
1.manager = new QNetworkAccessManager(this); //新建QNetworkAccessManager对象
2.使用get发送请求连接
manager->get(QNetworkRequest(QUrl("http://www.yafeilinux.com"))); //发送请求
3.在请求完成时,manager会发出信号SIGNAL(finished(QNetworkReply*)),这时执行槽函数replyFinished,将下载到的数据显示出来,以html方式
ui->textBrowser->setHtml(all);
下载文件
//widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QtNetwork>
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
void startRequest(QUrl url); //请求链接
protected:
//void changeEvent(QEvent *e);
private:
Ui::Widget *ui;
QNetworkAccessManager *manager;
QNetworkReply *reply;
QUrl url; //存储网络地址
QFile *file; //文件指针
private slots:
//void replyFinished(QNetworkReply *);
void on_pushButton_clicked();
void httpFinished(); //完成下载后的处理
void httpReadyRead(); //接收到数据时的处理
void updateDataReadProgress(qint64,qint64); //更新进度条
};
#endif // WIDGET_H
//widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
manager = new QNetworkAccessManager(this); //新建QNetworkAccessManager对象
// connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));
// manager->get(QNetworkRequest(QUrl("http://www.yafeilinux.com"))); //发送请求
ui->progressBar->hide();
}
Widget::~Widget()
{
delete ui;
}
/*
void Widget::replyFinished(QNetworkReply *reply) //当回复结束后
{
QTextCodec *codec = QTextCodec::codecForName("