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(QNetworkAccessManager *manager, QObject *parent = nullptr)
virtual ~QRestAccessManager() override
QNetworkReply *deleteResource(const QNetworkRequest &request, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
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, 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, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
QNetworkAccessManager *networkAccessManager() const
QNetworkReply *patch(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
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, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
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, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
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, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)
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 客户端应用程序非常有用。

通常的 Qt Network 功能可通过直接配置封装后的QNetworkAccessManager 访问。QRestAccessManager 不拥有封装后的QNetworkAccessManager 的所有权。

QRestAccessManager 和相关的QRestReply 类只能在它们所在的线程中使用。更多信息请参阅QObject thread affinity

发出网络请求和处理回复

网络请求通过与所需 HTTP 方法(如get()post() )相对应的函数调用发起。

使用信号和插槽

该函数返回一个QNetworkReply* 对象,其信号可用于以传统的 Qt XML 信号和插槽方式跟进请求的完成情况。

下面是一个如何发送 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-
QByteArrayXXX-X-X
QJsonDocument *)XXX-X--
QVariantMap **)-XX-X--
QHttpMultiPart-XX---X
QIODeviceXXX-X-X

*)QJsonDocumentQJsonDocument::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 对象。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::deleteResource(const QNetworkRequest &request, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

根据request 发布HTTP DELETE

如下图所示,可以提供可选的callbackcontext 对象来处理请求完成:

manager->deleteResource(request, this, [this](QRestReply &reply) {
    if (reply.isSuccess())
        // ...
});

也可以使用返回的QNetworkReply* 对象的信号。更多信息请参阅Issuing Network Requests and Handling Replies

deleteResource() 请求不支持提供数据。

另请参阅 QRestReply

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::get(const QNetworkRequest &request, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

根据request 发布HTTP GET

如下图所示,可以提供可选的callbackcontext 对象来处理请求完成:

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

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::get(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

根据request 和提供的data 发布HTTP GET

如下图所示,可选择提供callbackcontext 对象来处理请求完成:

manager->get(request, myData, this, [this](QRestReply &reply) {
    if (reply.isSuccess())
        // ...
});

也可使用返回的QNetworkReply* 对象的信号。更多信息请参见Issuing Network Requests and Handling Replies

另请参见 QRestReply

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::get(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

这是一个重载函数。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::get(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

这是一个重载函数。

根据request 发布HTTP HEAD

如下图所示,可以提供可选的callbackcontext 对象来处理请求完成:

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

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::patch(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

根据request 发布HTTP PATCH

如下图所示,可以提供可选的callbackcontext 对象来处理请求完成:

manager->patch(request, myData, this, [this](QRestReply &reply) {
    if (reply.isSuccess())
        // ...
});

也可以使用返回的QNetworkReply* 对象的信号。更多信息请参阅Issuing Network Requests and Handling Replies

patch() 方法始终需要data 参数。支持以下数据类型:

*)以QJsonDocument::Compact 格式发送,如果未设置Content-Type 标头,则将Content-Type 标头设置为application/json **)QVariantMap 将转换为并被视为QJsonObject

另请参见 QRestReply

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::patch(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

这是一个重载函数。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::patch(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

这是一个重载函数。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::patch(const QNetworkRequest &request, const QVariantMap &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

这是一个重载函数。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

根据request 发布HTTP POST

如下图所示,可以提供可选的callbackcontext 对象来处理请求完成:

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

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, QHttpMultiPart *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

这是一个重载函数。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

这是一个重载函数。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

这是一个重载函数。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::post(const QNetworkRequest &request, const QVariantMap &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

这是一个重载函数。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, const QJsonDocument &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

根据request 发布HTTP PUT

如下图所示,可以提供可选的callbackcontext 对象来处理请求完成:

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

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, QHttpMultiPart *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

这是一个重载函数。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

这是一个重载函数。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

这是一个重载函数。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::put(const QNetworkRequest &request, const QVariantMap &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

这是一个重载函数。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, const QByteArray &data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

使用自定义的method 和提供的data 发出基于request 的 HTTP 请求。

如下图所示,可以提供可选的callbackcontext 对象来处理请求完成:

manager->sendCustomRequest(request, "MYMETHOD",  myData,  this, [this](QRestReply &reply) {
    if (reply.isSuccess())
        // ...
});

也可使用返回的QNetworkReply* 对象的信号。更多信息,请参阅Issuing Network Requests and Handling Replies

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, QHttpMultiPart *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

这是一个重载函数。

template <typename Functor, QRestAccessManager::if_compatible_callback<Functor> > QNetworkReply *QRestAccessManager::sendCustomRequest(const QNetworkRequest &request, const QByteArray &method, QIODevice *data, const QRestAccessManager::ContextTypeForFunctor<Functor> *context, Functor &&callback)

这是一个重载函数。

© 2025 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.