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 を基にした便利なラッパーです。これは、一般的な RESTful クライアントアプリケーションに役立つデータ型や HTTP メソッドを修正したものです。
ラップされたQNetworkAccessManager を直接設定することで、通常のQt Network機能にアクセスできます。QRestAccessManagerは、ラップされたQNetworkAccessManager の所有権を取得しません。
QRestAccessManagerおよび関連するQRestReply クラスは、それらが存在するスレッド内でのみ使用できます。詳細については、QObject thread affinity を参照してください。
ネットワークリクエストの発行と応答の処理
ネットワークリクエストは、get() やpost() など、目的の HTTP メソッドに対応する関数の呼び出しによって開始されます。
シグナルとスロットの使用
この関数は `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& を1つパラメータとして受け取ります。コールバック関数は、メンバ関数へのポインタを含め、呼び出し可能な任意の関数であれば何でも使用できます。
これらのコールバックは、応答の処理が完了したとき(エラーにより処理が終了した場合も含む)に呼び出されます。
コンテキストオブジェクトとしてnullptr を使用することも可能ですが、一般的には推奨されません。有効なコンテキストオブジェクトを使用することで、リクエスト処理中にコンテキストオブジェクトが破棄されても、コールバックが呼び出されないことが保証されます。破棄されたコンテキストにアクセスする不要なコールバックは、アプリケーションの異常動作の原因となります。
以下に、GETリクエストを送信し、レスポンスを確認する例を示します:
// With lambda
manager->get(request, this, [this](QRestReply &reply) {
if (reply.isSuccess()) {
// ...
}
});
// With member function
manager->get(request, this, &MyClass::handleFinished);多くの関数は、サーバーに送信するためのデータを受け取ります。データは、リクエストに続く 2 番目のパラメータとして指定されます。
以下は、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.