QRestAccessManager Class
QRestAccessManager 是QNetworkAccessManager 的便捷封装类。更多内容...
| 标题: | #include <QRestAccessManager> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Network) target_link_libraries(mytarget PRIVATE Qt6::Network) |
| qmake: | QT += network |
| 自: | Qt 6.7 |
| 继承自: | QObject |
- 所有成员列表(包括继承的成员)
- QRestAccessManager 属于网络编程 API 的一部分。
注意:该类中的所有函数均为可重入的。
公共函数
| QRestAccessManager(QNetworkAccessManager *manager, QObject *parent = nullptr) | |
| virtual | ~QRestAccessManager() override |
| QNetworkReply * | deleteResource(const QNetworkRequest &request) |
| QNetworkReply * | deleteResource(const QNetworkRequest &request, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
| QNetworkReply * | get(const QNetworkRequest &request) |
| QNetworkReply * | get(const QNetworkRequest &request, const QByteArray &data) |
| QNetworkReply * | get(const QNetworkRequest &request, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
| QNetworkReply * | get(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
| QNetworkReply * | get(const QNetworkRequest &request, QIODevice *data) |
| QNetworkReply * | get(const QNetworkRequest &request, const QJsonDocument &data) |
| QNetworkReply * | get(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
| QNetworkReply * | get(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
| QNetworkReply * | head(const QNetworkRequest &request) |
| QNetworkReply * | head(const QNetworkRequest &request, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
| QNetworkAccessManager * | networkAccessManager() const |
| QNetworkReply * | patch(const QNetworkRequest &request, const QJsonDocument &data) |
| QNetworkReply * | patch(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
| QNetworkReply * | patch(const QNetworkRequest &request, QIODevice *data) |
| QNetworkReply * | patch(const QNetworkRequest &request, const QByteArray &data) |
| QNetworkReply * | patch(const QNetworkRequest &request, const QVariantMap &data) |
| QNetworkReply * | patch(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
| QNetworkReply * | patch(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
| QNetworkReply * | patch(const QNetworkRequest &request, const QVariantMap &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
| QNetworkReply * | post(const QNetworkRequest &request, const QJsonDocument &data) |
| QNetworkReply * | post(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
| QNetworkReply * | post(const QNetworkRequest &request, QHttpMultiPart *data) |
| QNetworkReply * | post(const QNetworkRequest &request, QIODevice *data) |
| QNetworkReply * | post(const QNetworkRequest &request, const QByteArray &data) |
| QNetworkReply * | post(const QNetworkRequest &request, const QVariantMap &data) |
| QNetworkReply * | post(const QNetworkRequest &request, QHttpMultiPart *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
| QNetworkReply * | post(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
| QNetworkReply * | post(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
| QNetworkReply * | post(const QNetworkRequest &request, const QVariantMap &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
| QNetworkReply * | put(const QNetworkRequest &request, const QJsonDocument &data) |
| QNetworkReply * | put(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
| QNetworkReply * | put(const QNetworkRequest &request, QHttpMultiPart *data) |
| QNetworkReply * | put(const QNetworkRequest &request, QIODevice *data) |
| QNetworkReply * | put(const QNetworkRequest &request, const QByteArray &data) |
| QNetworkReply * | put(const QNetworkRequest &request, const QVariantMap &data) |
| QNetworkReply * | put(const QNetworkRequest &request, QHttpMultiPart *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
| QNetworkReply * | put(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
| QNetworkReply * | put(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
| QNetworkReply * | put(const QNetworkRequest &request, const QVariantMap &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
| QNetworkReply * | sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, const QByteArray &data) |
| QNetworkReply * | sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
| QNetworkReply * | sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, QHttpMultiPart *data) |
| QNetworkReply * | sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, QIODevice *data) |
| QNetworkReply * | sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, QHttpMultiPart *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
| QNetworkReply * | sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback) |
详细说明
QRestAccessManager 是构建在QNetworkAccessManager 之上的便捷封装类。它修改了数据类型和 HTTP 方法,以便于典型的 RESTful 客户端应用程序使用。
通过直接配置被封装的QNetworkAccessManager ,可以访问常规的Qt Network功能。QRestAccessManager不会拥有被封装的QNetworkAccessManager 。
QRestAccessManager 及其相关的QRestReply 类只能在其所在的线程中使用。更多信息请参见QObject thread affinity 。
发起网络请求和处理响应
网络请求通过调用与所需 HTTP 方法对应的函数来发起,例如get() 和post() 。
使用信号与槽
该函数返回一个QNetworkReply* 对象,其信号可用于以传统的 Qt 信号与槽方式跟踪请求的完成情况。
以下是一个发送 GET 请求并处理响应的示例:
QNetworkReply *reply = manager->get(request);
QObject::connect(reply, &QNetworkReply::finished, this, [reply]() {
// The reply may be wrapped in the finish handler:
QRestReply restReply(reply);
if (restReply.isSuccess())
// ...
});使用回调和上下文对象
这些函数还接受类型为QObject (子类)的上下文对象和一个回调函数作为参数。回调函数接受一个QRestReply&作为参数。回调函数可以是任何可调用对象,包括成员函数指针。
当响应处理完成时(包括因错误导致处理结束的情况),这些回调函数会被调用。
上下文对象可以是 `nullptr`,但一般不建议这样做。使用有效的上下文对象可确保:如果上下文对象在请求处理期间被销毁,回调函数将不会被调用。访问已销毁上下文的游离回调是导致应用程序行为异常的根源。
以下是一个发送 GET 请求并检查响应的示例:
// With lambda
manager->get(request, this, [this](QRestReply &reply) {
if (reply.isSuccess()) {
// ...
}
});
// With member function
manager->get(request, this, &MyClass::handleFinished);许多函数会接收用于发送至服务器的数据。该数据作为请求后的第二个参数提供。
以下是一个发送 POST 请求并检查响应的示例:
QJsonDocument myJson;
// ...
manager->post(request, myJson, this, [this](QRestReply &reply) {
if (!reply.isSuccess()) {
// ...
}
if (std::optional json = reply.readJson()) {
// use *json
}
});提供的QRestReply 仅在回调执行期间有效。若需更长时间使用该对象,可将其移至另一个QRestReply 中,或构建一个新对象并使用QNetworkReply 进行初始化(参见QRestReply::networkReply())。
支持的数据类型
下表总结了方法及其支持的数据类型。X 表示支持。
| 数据类型 | get() | post() | put() | head() | patch() | deleteResource() | sendCustomRequest() |
|---|---|---|---|---|---|---|---|
| 无数据 | X | - | - | X | - | X | - |
| QByteArray | X | X | X | - | X | - | X |
| QJsonDocument *) | X | X | X | - | X | - | - |
| QVariantMap **) | - | X | X | - | X | - | - |
| QHttpMultiPart | - | X | X | - | - | - | X |
| QIODevice | X | X | X | - | X | - | X |
*)QJsonDocument 以QJsonDocument::Compact 格式发送,且若未设置Content-Type 标头,则Content-Type 标头将设置为application/json
**)QVariantMap 将被转换为并视为一个QJsonObject
另请参阅 QRestReply 、QNetworkRequestFactory 和QNetworkAccessManager 。
成员函数文档
[explicit] QRestAccessManager::QRestAccessManager(QNetworkAccessManager *manager, QObject *parent = nullptr)
创建一个 QRestAccessManager 对象,并将parent 设置为父对象,同时将manager 设置为用于通信的底层QNetworkAccessManager 。
另请参阅 networkAccessManager()。
[override virtual noexcept] QRestAccessManager::~QRestAccessManager()
销毁QRestAccessManager 对象。
QNetworkReply *QRestAccessManager::deleteResource(const QNetworkRequest &request)
template <typename Functor> requires if_compatible_callback<Functor> QNetworkReply *QRestAccessManager::deleteResource(const QNetworkRequest &request, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
根据request 生成一个HTTP DELETE 。
可提供可选的callback 和context 对象来处理请求完成,如下所示:
manager->deleteResource(request, this, [this](QRestReply &reply) {
if (reply.isSuccess())
// ...
});或者,也可以使用返回的 `QNetworkReply*` 对象的信号。有关更多信息,请参阅 `Issuing Network Requests and Handling Replies`。
deleteResource() 该请求不支持提供数据。
另请参阅 QRestReply 。
QNetworkReply *QRestAccessManager::get(const QNetworkRequest &request)
template <typename Functor> requires if_compatible_callback<Functor> QNetworkReply *QRestAccessManager::get(const QNetworkRequest &request, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
根据request 创建一个HTTP GET 。
可提供可选的 `callback ` 和 `context ` 对象来处理请求完成,如下所示:
manager->get(request, this, [this](QRestReply &reply) {
if (!reply.isSuccess())
// handle error
if (std::optional json = reply.readJson())
// use *json
});或者,也可以使用返回的QNetworkReply* 对象的信号。更多信息请参阅Issuing Network Requests and Handling Replies 。
另请参阅 QRestReply 。
QNetworkReply *QRestAccessManager::get(const QNetworkRequest &request, const QByteArray &data)
template <typename Functor> requires if_compatible_callback<Functor> QNetworkReply *QRestAccessManager::get(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
根据request 并结合提供的data ,生成一个HTTP GET 。
可选的callback 和context 对象可用于处理请求完成,如下所示:
manager->get(request, myData, this, [this](QRestReply &reply) {
if (reply.isSuccess())
// ...
});或者,也可以使用返回的QNetworkReply* 对象的信号。有关详细信息,请参阅Issuing Network Requests and Handling Replies 。
另请参阅 QRestReply 。
QNetworkReply *QRestAccessManager::get(const QNetworkRequest &request, QIODevice *data)
template <typename Functor> requires if_compatible_callback<Functor> QNetworkReply *QRestAccessManager::get(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *QRestAccessManager::get(const QNetworkRequest &request, const QJsonDocument &data)
template <typename Functor> requires if_compatible_callback<Functor> QNetworkReply *QRestAccessManager::get(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *QRestAccessManager::head(const QNetworkRequest &request)
template <typename Functor> requires if_compatible_callback<Functor> QNetworkReply *QRestAccessManager::head(const QNetworkRequest &request, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
根据request 生成一个HTTP HEAD 。
可提供可选的callback 和context 对象来处理请求完成,如下所示:
manager->head(request, this, [this](QRestReply &reply) {
if (reply.isSuccess())
// ...
});或者,也可以使用返回的QNetworkReply* 对象的信号。有关详细信息,请参阅Issuing Network Requests and Handling Replies 。
head() 该请求不支持提供数据。
另请参阅 QRestReply 。
QNetworkAccessManager *QRestAccessManager::networkAccessManager() const
返回底层的QNetworkAccessManager 实例。
另请参阅 QNetworkAccessManager 。
QNetworkReply *QRestAccessManager::patch(const QNetworkRequest &request, const QJsonDocument &data)
template <typename Functor> requires if_compatible_callback<Functor> QNetworkReply *QRestAccessManager::patch(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
根据request 生成一个HTTP PATCH 。
可提供可选的callback 和context 对象来处理请求完成,如下所示:
manager->patch(request, myData, this, [this](QRestReply &reply) {
if (reply.isSuccess())
// ...
});或者,也可以使用返回的 `QNetworkReply*` 对象的信号。有关详细信息,请参阅 `Issuing Network Requests and Handling Replies`。
patch() 方法始终需要data 参数。支持以下数据类型:
- QByteArray
- QJsonDocument *)
- QVariantMap **)
- QIODevice*
*) 以QJsonDocument::Compact 格式发送,且若未设置Content-Type 标头,则Content-Type 标头将设置为application/json **)QVariantMap 将被转换并视为QJsonObject
另请参阅 QRestReply 。
QNetworkReply *QRestAccessManager::patch(const QNetworkRequest &request, QIODevice *data)
template <typename Functor> requires if_compatible_callback<Functor> QNetworkReply *QRestAccessManager::patch(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *QRestAccessManager::patch(const QNetworkRequest &request, const QByteArray &data)
template <typename Functor> requires if_compatible_callback<Functor> QNetworkReply *QRestAccessManager::patch(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *QRestAccessManager::patch(const QNetworkRequest &request, const QVariantMap &data)
template <typename Functor> requires if_compatible_callback<Functor> QNetworkReply *QRestAccessManager::patch(const QNetworkRequest &request, const QVariantMap &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, const QJsonDocument &data)
template <typename Functor> requires if_compatible_callback<Functor> QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
根据request 生成一个HTTP POST 。
可提供可选的 `callback ` 和 `context ` 对象来处理请求完成,如下所示:
manager->post(request, myData, this, [this](QRestReply &reply) {
if (reply.isSuccess())
// ...
});此外,也可以使用返回的QNetworkReply* 对象的信号。有关详细信息,请参阅Issuing Network Requests and Handling Replies 。
post() 方法始终需要data 参数。支持以下数据类型:
*) 以QJsonDocument::Compact 格式发送,且若未设置Content-Type 标头,则Content-Type 标头将设置为application/json **)QVariantMap 将被转换并视为QJsonObject
另请参阅 QRestReply 。
QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, QHttpMultiPart *data)
template <typename Functor> requires if_compatible_callback<Functor> QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, QHttpMultiPart *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, QIODevice *data)
template <typename Functor> requires if_compatible_callback<Functor> QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, const QByteArray &data)
template <typename Functor> requires if_compatible_callback<Functor> QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, const QVariantMap &data)
template <typename Functor> requires if_compatible_callback<Functor> QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, const QVariantMap &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, const QJsonDocument &data)
template <typename Functor> requires if_compatible_callback<Functor> QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
根据request 生成一个HTTP PUT 对象。
可提供可选的 `callback ` 和 `context ` 对象来处理请求完成,如下所示:
manager->put(request, myData, this, [this](QRestReply &reply) {
if (reply.isSuccess())
// ...
});或者,也可以使用返回的QNetworkReply* 对象的信号。有关详细信息,请参阅Issuing Network Requests and Handling Replies 。
put() 方法始终需要data 参数。支持以下数据类型:
*) 以QJsonDocument::Compact 格式发送,如果未设置Content-Type 标头,则Content-Type 标头将设置为application/json **)QVariantMap 将被转换并视为QJsonObject
另请参阅 QRestReply 。
QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, QHttpMultiPart *data)
template <typename Functor> requires if_compatible_callback<Functor> QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, QHttpMultiPart *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, QIODevice *data)
template <typename Functor> requires if_compatible_callback<Functor> QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, const QByteArray &data)
template <typename Functor> requires if_compatible_callback<Functor> QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, const QVariantMap &data)
template <typename Functor> requires if_compatible_callback<Functor> QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, const QVariantMap &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *QRestAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, const QByteArray &data)
template <typename Functor> requires if_compatible_callback<Functor> QNetworkReply *QRestAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
发送基于request 的HTTP请求,并使用自定义的method 以及提供的data 。
可选的callback 和context 对象可用于处理请求完成,如下所示:
manager->sendCustomRequest(request, "MYMETHOD", myData, this, [this](QRestReply &reply) {
if (reply.isSuccess())
// ...
});此外,还可以使用返回的QNetworkReply* 对象的信号。有关详细信息,请参阅Issuing Network Requests and Handling Replies 。
QNetworkReply *QRestAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, QHttpMultiPart *data)
template <typename Functor> requires if_compatible_callback<Functor> QNetworkReply *QRestAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, QHttpMultiPart *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkReply *QRestAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, QIODevice *data)
template <typename Functor> requires if_compatible_callback<Functor> QNetworkReply *QRestAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.