理论:
QNetworkRequest 类用于表示网络请求,它也充当一个与请求信息相关的通用容器,例如:任何头信息和使用的加密相关的信息。当一个 request 对象被构造时,指定的 URL 决定所用的协议。目前 HTTP、FTP 和本地文件 URLs 支持上传和下载。
QNetworkAccessManager 类用于协调网络操作,一旦创建一个 request,该类用来发出请求并发射信号来报告它的进度。manager 也协调 cookies 的使用在 client 存储数据、请求的身份验证、代理的使用。
QNetworkReply 类用于网络请求的响应,当一个 request 被发出后,QNetworkAccessManager 就会创建相应的响应,通过 QNetworkReply 提供的信号可以单独监听每个响应,或者使用 manager 的信号。由于 QNetworkReply 是 QIODevice 的一个子类,可以同步或异步处理响应;也就是说,阻塞或非阻塞操作。
每个应用程序或库都可以创建一个或多个 QNetworkAccessManager 实例来处理网络通信。
实例:
功能:
获取指定网页的信息。
效果图:
步骤:
步骤一:
在pro文件中,加入QT += network
步骤二:
加入用到的函数头文件。
#include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkReply>
源码:
//main.cpp
- #include "mainwindow.h"
- #include <QApplication>
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- MainWindow w;
- w.show();
- return a.exec();
- }
//mainwindow.h
- #ifndef MAINWINDOW_H
- #define MAINWINDOW_H
- #include <QMainWindow>
- #include <QtNetwork/QNetworkAccessManager>
- #include <QtNetwork/QNetworkRequest>
- #include <QtNetwork/QNetworkReply>
- namespace Ui {
- class MainWindow;
- }
- class MainWindow : public QMainWindow
- {
- Q_OBJECT
- public:
- explicit MainWindow(QWidget *parent = 0);
- ~MainWindow();
- private slots:
- void finishedSlot(QNetworkReply*);
- private:
- QNetworkAccessManager *m_NetManger;
- QNetworkReply* m_Reply;
- private:
- Ui::MainWindow *ui;
- };
- #endif // MAINWINDOW_H
//mainwindow.cpp
-
- #include "mainwindow.h"
- #include <QUrl>
- #include <QVariant>
- #include "ui_mainwindow.h"
- MainWindow::MainWindow(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::MainWindow)
- {
- ui->setupUi(this);
- m_NetManger = new QNetworkAccessManager;
- QUrl url("http://www.suse.edu.cn/");
- m_Reply = m_NetManger->get(QNetworkRequest(url));
- QObject::connect(m_NetManger, SIGNAL(finished(QNetworkReply*)),
- this, SLOT(finishedSlot(QNetworkReply*)));
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- }
- void MainWindow::finishedSlot(QNetworkReply *)
- {
- m_Reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
- m_Reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
- if (m_Reply->error() == QNetworkReply::NoError)
- {
- QByteArray bytes = m_Reply->readAll();
- QString string = QString::fromUtf8(bytes);
- qDebug()<<string;
- ui->textBrowser->setText(string);
- }
- else
- {
- qDebug()<< m_Reply->errorString();
- }
- m_Reply->deleteLater();
- }