您的位置:首页 > 其它

QNetworkAccessManager

2018-10-10 11:41 471 查看

【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 = 0);
~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.

顺序 选择 循环 总结

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: