QQmlNetworkAccessManagerFactory Class
Die Klasse QQmlNetworkAccessManagerFactory erstellt QNetworkAccessManager Instanzen für eine QML-Engine. Mehr...
Kopfzeile: | #include <QQmlNetworkAccessManagerFactory> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
qmake: | QT += qml |
Öffentliche Funktionen
virtual | ~QQmlNetworkAccessManagerFactory() |
virtual QNetworkAccessManager * | create(QObject *parent) = 0 |
Detaillierte Beschreibung
Eine QML-Engine verwendet QNetworkAccessManager für alle Netzwerkzugriffe. Durch die Implementierung einer Factory ist es möglich, der QML-Engine benutzerdefinierte QNetworkAccessManager Instanzen mit spezieller Caching-, Proxy- und Cookie-Unterstützung zur Verfügung zu stellen.
- Die QNetworkDiskCache kann als Anfrage-Cache mit QNetworkDiskCache verwendet werden.
- Mit QNetworkProxy kann der von QNetworkAccessManager gesendete Verkehr durch einen Proxy getunnelt werden.
- Cookies können für zukünftige Anfragen gespeichert werden, indem ein QNetworkCookieJar hinzugefügt wird.
Um eine Fabrik zu implementieren, untergliedern Sie die Klasse QQmlNetworkAccessManagerFactory, implementieren die virtuelle Methode create() und weisen sie dann mit QQmlEngine::setNetworkAccessManagerFactory() der entsprechenden QML-Engine zu. Zum Beispiel werden die QNetworkAccessManager Objekte, die durch das folgende Snippet erstellt werden, Anfragen zwischenspeichern.
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; } };
Die Factory kann dann an die QML-Engine übergeben werden, damit diese die QNetworkAccessManager mit dem benutzerdefinierten Verhalten instanziieren kann.
CachingNetworkAccessManagerFactory networkManagerFactory; engine->setNetworkAccessManagerFactory(&networkManagerFactory);
Beachten Sie, dass die QML-Engine QNetworkAccessManager Instanzen von mehreren Threads aus erstellen kann. Aus diesem Grund muss die Implementierung der Methode create() reentrant sein. Darüber hinaus sollte der Entwickler vorsichtig sein, wenn die Signale des Objekts, das von create() zurückgegeben werden soll, mit den Slots eines Objekts verbunden sind, das möglicherweise in einem anderen Thread erstellt wird:
- Die QML-Engine verarbeitet intern alle Anfragen und bereinigt alle QNetworkReply Objekte, die sie erstellt. Wenn das Signal QNetworkAccessManager::finished() in einem anderen Thread empfangen wird, erhält der Empfänger möglicherweise kein gültiges Antwortobjekt, wenn es bereits gelöscht wurde.
- Die Authentifizierungsdaten, die QNetworkAccessManager::authenticationRequired() zur Verfügung gestellt werden, müssen sofort übermittelt werden, so dass dieses Signal nicht als Qt::QueuedConnection (oder als Standard Qt::AutoConnection von einem anderen Thread) verbunden werden kann.
Weitere Informationen über Signale und Threads finden Sie unter Threads und QObjects und Signale und Slots über Threads hinweg.
Siehe auch QNetworkDiskCache.
Dokumentation der Mitgliedsfunktionen
[virtual noexcept]
QQmlNetworkAccessManagerFactory::~QQmlNetworkAccessManagerFactory()
Zerstört die Fabrik. Die Standardimplementierung tut nichts.
[pure virtual]
QNetworkAccessManager *QQmlNetworkAccessManagerFactory::create(QObject *parent)
Erzeugt einen Netzzugangsmanager mit der angegebenen parent und gibt ihn zurück. Diese Methode muss bei jedem Aufruf eine neue QNetworkAccessManager -Instanz zurückgeben.
Hinweis: Diese Methode kann von mehreren Threads aufgerufen werden; stellen Sie daher sicher, dass die Implementierung dieser Methode reentrant ist.
© 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.