QNetworkAccessManager

时间:2023-03-09 20:14:17
QNetworkAccessManager

【1】头文件

想要利用QNetworkAccessManager类,必须在pro文件中添加对应库network,如下:

QT += network

如果利用的VS + QT开发环境,请参考随笔《Qt添加QtNetwork库文件

【2】示例文件

文件1:

 #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 = );
~MainWindow(); private:
void get(QUrl u); private slots:
void on_pushButton_clicked();
void finished(); private:
Ui::MainWindow *ui; QUrl m_url;
QString m_htmlText;
QNetworkReply *m_pReply;
QNetworkAccessManager m_manager;
}; #endif // MAINWINDOW_H

文件2:

 #include "mainwindow.h"
#include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
m_pReply(Q_NULLPTR)
{
ui->setupUi(this);
} MainWindow::~MainWindow()
{
delete ui;
} void MainWindow::get(QUrl u)
{
m_url = u; if (m_pReply != Q_NULLPTR)
{ // 更改reply指向位置前一定要保证之前的定义了自动delete
m_pReply->deleteLater();
} QNetworkRequest request;
request.setUrl(m_url);
m_pReply = m_manager.get(request);
qDebug() << "start get";
connect(m_pReply, &QNetworkReply::finished, this, &MainWindow::finished);
} void MainWindow::finished()
{
QByteArray bytes = m_pReply->readAll(); m_pReply->deleteLater();
m_pReply = Q_NULLPTR; const QVariant redirectionTarget = m_pReply->attribute(QNetworkRequest::RedirectionTargetAttribute);
if (!redirectionTarget.isNull())
{ //如果网址跳转重新请求
const QUrl redirectedUrl = m_url.resolved(redirectionTarget.toUrl());
qDebug() << "redirectedUrl:" << redirectedUrl.url();
get(redirectedUrl);
return;
} qDebug() << "finished";
m_htmlText = bytes;
qDebug() << "get ready,read size:" << m_htmlText.size(); // 写入文件
QFile f("result.html");
f.open(QFile::WriteOnly);
f.write(bytes);
} void MainWindow::on_pushButton_clicked()
{
m_htmlText = "";
get(QUrl("http://www.baidu.com/"));
}

返回的结果文件:

在运行目录中查找result.html文件,双击运行,然后与百度首页作对比,可以发现get获取的数据中不包含图片信息。

【3】总结

示例程序很简单,主要应用QNetworkAccessManager类的get接口。

Good Good Study, Day Day Up.

顺序 选择 循环 总结