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 を追加することで、将来のリクエストのために Cookie を保存することができます。
ファクトリを実装するには、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 として)接続することはできません。
シグナルとスレッドに関する詳細については、「スレッドとQObject」および「スレッド間のシグナルとスロット」を参照してください。
「QNetworkDiskCache」も参照してください 。
メンバ関数のドキュメント
[virtual noexcept] QQmlNetworkAccessManagerFactory::~QQmlNetworkAccessManagerFactory()
工場を破壊します。デフォルトの実装では何もしません。
[pure virtual] QNetworkAccessManager *QQmlNetworkAccessManagerFactory::create(QObject *parent)
指定されたparent を持つネットワークアクセスマネージャを作成して返します。このメソッドは、呼び出されるたびに新しいQNetworkAccessManager インスタンスを返さなければなりません。
注:このメソッドは複数のスレッドから呼び出される可能性があるため、このメソッドの実装が再入可能であることを確認してください。
© 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.