【1】头文件
想要利用QNetworkAccessManager类,必须在pro文件中添加对应库network,如下:
QT += network
【2】示例文件
文件1:
1 #ifndef MAINWINDOW_H 2 #define MAINWINDOW_H 3 4 #include <QMainWindow> 5 #include <QtNetWork> 6 7 namespace Ui 8 { 9 class MainWindow;10 }11 12 class MainWindow : public QMainWindow13 {14 Q_OBJECT15 16 public:17 explicit MainWindow(QWidget *parent = 0);18 ~MainWindow();19 20 private:21 void get(QUrl u);22 23 private slots:24 void on_pushButton_clicked();25 void finished();26 27 private:28 Ui::MainWindow *ui;29 30 QUrl m_url;31 QString m_htmlText;32 QNetworkReply *m_pReply;33 QNetworkAccessManager m_manager;34 };35 36 #endif // MAINWINDOW_H
文件2:
1 #include "mainwindow.h" 2 #include "ui_mainwindow.h" 3 4 MainWindow::MainWindow(QWidget *parent) : 5 QMainWindow(parent), 6 ui(new Ui::MainWindow), 7 m_pReply(Q_NULLPTR) 8 { 9 ui->setupUi(this);10 }11 12 MainWindow::~MainWindow()13 {14 delete ui;15 }16 17 void MainWindow::get(QUrl u)18 {19 m_url = u;20 21 if (m_pReply != Q_NULLPTR)22 { // 更改reply指向位置前一定要保证之前的定义了自动delete23 m_pReply->deleteLater();24 }25 26 QNetworkRequest request;27 request.setUrl(m_url);28 m_pReply = m_manager.get(request);29 qDebug() << "start get";30 connect(m_pReply, &QNetworkReply::finished, this, &MainWindow::finished);31 }32 33 void MainWindow::finished()34 {35 QByteArray bytes = m_pReply->readAll();36 37 m_pReply->deleteLater();38 m_pReply = Q_NULLPTR;39 40 const QVariant redirectionTarget = m_pReply->attribute(QNetworkRequest::RedirectionTargetAttribute);41 if (!redirectionTarget.isNull())42 { //如果网址跳转重新请求43 const QUrl redirectedUrl = m_url.resolved(redirectionTarget.toUrl());44 qDebug() << "redirectedUrl:" << redirectedUrl.url();45 get(redirectedUrl);46 return;47 }48 49 qDebug() << "finished";50 m_htmlText = bytes;51 qDebug() << "get ready,read size:" << m_htmlText.size();52 53 // 写入文件54 QFile f("result.html");55 f.open(QFile::WriteOnly);56 f.write(bytes);57 }58 59 void MainWindow::on_pushButton_clicked()60 {61 m_htmlText = "";62 get(QUrl("http://www.baidu.com/"));63 }
返回的结果文件:
在运行目录中查找result.html文件,双击运行,然后与百度首页作对比,可以发现get获取的数据中不包含图片信息。
【3】总结
示例程序很简单,主要应用QNetworkAccessManager类的get接口。
Good Good Study, Day Day Up.
顺序 选择 循环 总结