QQmlNetworkAccessManagerFactory Class
QQmlNetworkAccessManagerFactory クラスは、QML エンジン用のQNetworkAccessManager インスタンスを生成します。詳細...
Header: | #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 インスタンスを返す必要があります。
注意:このメソッドは複数のスレッドから呼び出される可能性があるため、このメソッドの実装がリエントラントであることを確認してください。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。