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.
顺序 选择 循环 总结
相关文章推荐
- QNetworkAccessManager(网络访问管理器)
- Network access for Distributed Transaction Manager (MSDTC) has been disabled (转载)
- 标记一下 :QNetworkAccessManager
- 解决QNetworkAccessManager实现ftp功能后,不能上传大于1G文件的问题
- 程序员一枚】Qt网络开发之QNetworkAccessManager的使用
- POJ代码提交器 QNetworkAccessManager post get
- QFTP走了以后QNetworkAccessManager出现了
- Qt网络编程之QNetworkAccessManager
- QT QNetworkAccessManager跳转URL处理
- QNetworkAccessManager 放到线程中使用finished信号不触发
- QNetworkAccessManager post()和get()方法
- QNetworkAccessManager不使用信号/槽机制来获得QNetworkReply的解决办法
- Qt网络开发之QNetworkAccessManager使用要点
- undefined reference to `QNetworkAccessManager::QNetworkAccessManager(QObject*)'
- QWebEngineView使用QNetworkAccessManager的QNetworkCookieJar
- 通过QEventLoop实现网络请求QNetworkAccesssManager阻塞
- QNetworkAccessManager 实现FTP上传功能,解决 文件名是中文,QUrl含有中文路径 不能上传的问题
- 为QNetworkAccessManager添加超时提醒(自己记录一段时间里的下载字节数,用定时器去定期检测,从而判断是否超时)
- Network Manager Applet(/usr/bin/nm-applet) wants access to the default keyring but it is locked
- Qt---QNetworkAccessManager