使用 VS 构建 Qt 项目时 QtNetwork 无法使用的问题 - 摘叶飞镖 - 博客园 (cnblogs.com)
另外,强烈建议在使用QNetworkAccessManager之前看看这篇文章:
Qt 之 QNetworkAccessManager踏坑记录-CSDN博客
C++ Qt开发:QNetworkAccessManager网络接口组件
阅读目录
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QNetworkAccessManager
组件实现Web网页访问。
QNetworkAccessManager是Qt网络模块中的关键类,用于管理网络访问和请求。作为一个网络请求的调度中心,它为Qt应用程序提供了发送和接收各种类型的网络请求的能力,包括常见的GET、POST、PUT、DELETE等。这个模块的核心功能在于通过处理QNetworkReply
和QNetworkRequest
来实现与网络资源的交互。
通过QNetworkAccessManager
,Qt应用程序能够轻松地与远程服务器通信,获取数据或将数据上传到服务器。这种网络请求的管理不仅是异步的,以确保不会阻塞主线程,还提供了丰富的信号和槽机制,使得开发者可以灵活地处理不同阶段的网络操作。
通常,QNetworkAccessManager
会与QNetworkReply
和QNetworkRequest
一起使用。QNetworkRequest
用于封装和配置网络请求的各种属性,例如URL、请求头等。而QNetworkReply
则代表了对网络请求的响应,包含了请求返回的数据和相关信息。这三者共同协作,为Qt应用程序提供了便捷、灵活且强大的网络通信能力。
1.1 通用API函数
1.1.1 QNetworkAccessManager
要想实现网络通信首先需要新建一个网络访问管理器,以下是QNetworkAccessManager
类中的一些常用函数及其描述:
函数 | 描述 |
---|---|
QNetworkAccessManager(QObject *parent = nullptr) |
构造函数,创建一个QNetworkAccessManager 实例。 |
virtual ~QNetworkAccessManager() |
虚析构函数,释放QNetworkAccessManager 实例。 |
QNetworkReply *get(const QNetworkRequest &request) |
发送GET请求,并返回与请求关联的QNetworkReply 对象。 |
QNetworkReply *post(const QNetworkRequest &request, QIODevice *data) |
发送POST请求,并返回与请求关联的QNetworkReply 对象。 |
QNetworkReply *post(const QNetworkRequest &request, const QByteArray &data) |
发送POST请求,并返回与请求关联的QNetworkReply 对象。 |
QNetworkReply *put(const QNetworkRequest &request, QIODevice *data) |
发送PUT请求,并返回与请求关联的QNetworkReply 对象。 |
QNetworkReply *put(const QNetworkRequest &request, const QByteArray &data) |
发送PUT请求,并返回与请求关联的QNetworkReply 对象。 |
QNetworkReply *deleteResource(const QNetworkRequest &request) |
发送DELETE请求,并返回与请求关联的QNetworkReply 对象。 |
QNetworkReply *head(const QNetworkRequest &request) |
发送HEAD请求,并返回与请求关联的QNetworkReply 对象。 |
QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, QIODevice *data = nullptr) |
发送自定义请求,并返回与请求关联的QNetworkReply 对象。 |
QNetworkReply *sendCustomRequest(const QNetworkRequest &request, const QByteArray &verb, const QByteArray &data) |
发送自定义请求,并返回与请求关联的QNetworkReply 对象。 |
void setConfiguration(const QNetworkConfiguration &config) |
设置网络配置,用于定制网络行为。 |
QNetworkConfiguration configuration() const |
获取当前网络配置。 |
void clearAccessCache() |
清除网络访问缓存。 |
void setCache(QAbstractNetworkCache *cache) |
设置网络缓存。 |
QAbstractNetworkCache *cache() const |
获取当前网络缓存。 |
void setCookieJar(QNetworkCookieJar *cookieJar) |
设置用于管理HTTP cookie的QNetworkCookieJar 。 |
QNetworkCookieJar *cookieJar() const |
获取当前的HTTP cookie管理器。 |
这些函数提供了QNetworkAccessManager
的核心功能,使得开发者能够方便地进行各种类型的网络请求,配置网络参数,并进行相关的网络管理操作。
1.1.2 QNetworkReply
以下是QNetworkReply
类中的一些常用函数及其描述:
函数 | 描述 |
---|---|
QByteArray readAll() const |
读取所有可用的数据,并返回一个QByteArray ,包含从网络回复读取的所有内容。 |
QByteArray peek(int maxSize) const |
查看最多maxSize 字节的可用数据,但不从缓冲区中移除。 |
QByteArray read(int maxSize) |
从网络回复中读取最多maxSize 字节的数据,并将其从缓冲区中移除。 |
QByteArray readLine(int maxSize = 0) |
从网络回复中读取一行数据,最多包含maxSize 字节,并将其从缓冲区中移除。 |
void ignoreSslErrors(const QList<QSslError> &errors = QList<QSslError>()) |
忽略SSL错误,继续处理网络回复。 |
void abort() |
终止网络回复的处理,关闭底层连接。 |
void close() |
关闭网络回复的处理。 |
QUrl url() const |
返回与网络回复相关联的URL。 |
QNetworkRequest request() const |
返回生成此网络回复的网络请求。 |
QNetworkAccessManager *manager() const |
返回与网络回复相关联的QNetworkAccessManager 。 |
bool isFinished() const |
检查网络回复是否已完成。 |
QNetworkReply::NetworkError error() const |
返回网络回复的错误代码。 |
bool hasRawHeader(const QByteArray &headerName) const |
检查网络回复是否包含指定原始头。 |
QList<QByteArray> rawHeaderList() const |
返回网络回复的所有原始头的列表。 |
QByteArray rawHeader(const QByteArray &headerName) const |
返回指定原始头的值。 |