QQmlNetworkAccessManagerFactory Class
QQmlNetworkAccessManagerFactory クラスは、QML エンジン用のQNetworkAccessManager インスタンスを生成します。詳細...
ヘッダー | #include <QQmlNetworkAccessManagerFactory> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
qmake: | QT += qml |
パブリック関数
virtual | ~QQmlNetworkAccessManagerFactory() |
virtual QNetworkAccessManager * | create(QObject *parent) = 0 |
詳細説明
QML エンジンはすべてのネットワークアクセスにQNetworkAccessManager を使用します。ファクトリを実装することで、キャッシュ、プロキシ、クッキーに特化したカスタムのQNetworkAccessManager インスタンスを QML エンジンに提供することができます。
- QNetworkDiskCache はQNetworkDiskCache とともにリクエストキャッシュとして利用できます。
- QNetworkProxy を使えば、QNetworkAccessManager から送られるトラフィックをプロキシ経由でトンネリングすることができます。
- クッキーは、QNetworkCookieJar を追加することで、将来のリクエストのために保存できる。
ファクトリーを実装するには、QQmlNetworkAccessManagerFactory をサブクラス化し、仮想的なcreate() メソッドを実装し、QQmlEngine::setNetworkAccessManagerFactory() を使って関連する QML エンジンに割り当てます。例えば、以下のスニペットで作成したQNetworkAccessManager オブジェクトはリクエストをキャッシュします。
class CachingNetworkAccessManagerFactory : public QQmlNetworkAccessManagerFactory { public: inline QNetworkAccessManager *create(QObject *parent) override { QNetworkAccessManager *networkAccessManager = new QNetworkAccessManager(parent); QNetworkDiskCache *diskCache = new QNetworkDiskCache(parent); diskCache->setCacheDirectory("requestCache"); networkAccessManager->setCache(diskCache); return networkAccessManager; } };
このファクトリを QML エンジンに渡すことで、QNetworkAccessManager のインスタンスを生成し、カスタムな振る舞いをさせることができます。
CachingNetworkAccessManagerFactory networkManagerFactory; engine->setNetworkAccessManagerFactory(&networkManagerFactory);
QML エンジンは複数のスレッドからQNetworkAccessManager のインスタンスを生成する可能性があることに注意してください。そのため、create() メソッドの実装はreentrant でなければなりません。また、create() から返されるオブジェクトのシグナルが、別のスレッドで生成される可能性のあるオブジェクトのスロットに接続されている場合、開発者は注意する必要があります:
- QMLエンジンは内部的にすべてのリクエストを処理し、作成したQNetworkReply オブジェクトをクリーンアップします。別のスレッドでQNetworkAccessManager::finished() シグナルを受信した場合、そのオブジェクトが既に削除されていると、 受信者に有効な応答オブジェクトを提供できない可能性があります。
- QNetworkAccessManager::authenticationRequired() に提供される認証の詳細は直ちに提供されなければならないため、このシグナルをQt::QueuedConnection として(または別のスレッドからデフォルトのQt::AutoConnection として)接続することはできません。
シグナルとスレッドの詳細については、スレッドとQObjects、およびスレッド間のシグナルとスロットを参照してください。
QNetworkDiskCacheも参照してください 。
メンバ関数ドキュメント
[virtual noexcept]
QQmlNetworkAccessManagerFactory::~QQmlNetworkAccessManagerFactory()
ファクトリーを破壊します。デフォルトの実装では何もしません。
[pure virtual]
QNetworkAccessManager *QQmlNetworkAccessManagerFactory::create(QObject *parent)
指定されたparent を持つネットワーク・アクセス・マネージャを作成し、返す。このメソッドは、呼び出されるたびに新しいQNetworkAccessManager インスタンスを返す必要があります。
注意:このメソッドは複数のスレッドから呼び出される可能性があるため、このメソッドの実装がリエントラントであることを確認してください。
© 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.