一、HTTP协议
Qt网络模块提供的API可以实现基于HTTP(Hyper Text Transport Protocol)协议的应用程序。此外, Qt还可以实现多种基于协议的应用程序, 如位于OSI 7层应用层的FTP、DNS、SNMP。
Qt4.x版本提供了QHttp和QFtp类以支持HTTP和FTP协议。从Qt 5.0 版本开始, 删除了QHttp 和 QFtp 类, 通过QNetworkReply、QNetworkAccessManager、QNetworkRequest类实现基于HTTP和FTP协议的应用程序。除了HTTP和FTP协议外, 该类还可以实现高层(OSI 7层中的上层)网络应用程序。
① QNetworkRequest类, 通过网络请求是使用。而且, 可以请求包含头信息和加密(encryption)的头信息。 QNetworkRequest可以通过URL上传和下载HTTP、FTP的本地文件。
② QNetworkAccessManager 类用于管理网络请求和响应, 可以在网络上管理请求 和 响应的设置, 使用代理和缓存,处理网络请求和响应过程中触发的信号。
③ QNetworkReply类用于在网络上处理响应, 它是QIODevice的子类, 支持同步异步的方式。
二、代码示例
头文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| #ifndef NETWORKWIDGET_H #define NETWORKWIDGET_H
#include <QtNetwork/QNetworkAccessManager> #include <QtNetwork/QNetworkRequest> #include <QtNetwork/QNetworkReply> #include <QtWidgets/QWidget> #include <QTextCodec> #include <QString> #include <QUrl> #include "ui_networkWidget.h"
class networkWidget : public QWidget { Q_OBJECT
public: networkWidget(QWidget *parent = 0); ~networkWidget();
private Q_SLOTS: void slot_replayFinished(QNetworkReply *reply);
private: Ui::networkWidgetClass ui;
QNetworkAccessManager *m_manager; };
#endif
|
源文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #include "networkWidget.h"
networkWidget::networkWidget(QWidget *parent) : QWidget(parent) { ui.setupUi(this); this->setWindowFlags(Qt::FramelessWindowHint); m_manager = new QNetworkAccessManager(this); connect(m_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(slot_replayFinished(QNetworkReply*))); m_manager->get(QNetworkRequest(QUrl("http://apistore.baidu.com/microservice/weather?cityid=成都"))); }
networkWidget::~networkWidget() { }
void networkWidget::slot_replayFinished(QNetworkReply *reply) { QTextCodec *codec = QTextCodec::codecForName("utf8"); QString str = codec->toUnicode(reply->readAll()); ui.textBrowser->setText(str); reply->deleteLater(); }
|
main 文件
1 2 3 4 5 6 7 8 9 10
| #include "networkWidget.h" #include <QtWidgets/QApplication>
int main(int argc, char *argv[]) { QApplication a(argc, argv); networkWidget w; w.show(); return a.exec(); }
|