QQmlNetworkAccessManagerFactory Class
Die Klasse „QQmlNetworkAccessManagerFactory“ erstellt „ QNetworkAccessManager “-Instanzen für eine QML-Engine. Mehr...
| Header: | #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 |
Ausführliche Beschreibung
Eine QML-Engine nutzt „ QNetworkAccessManager “ für den gesamten Netzwerkzugriff. Durch die Implementierung einer Factory ist es möglich, der QML-Engine benutzerdefinierte „ QNetworkAccessManager “-Instanzen mit spezieller Unterstützung für Caching, Proxy und Cookies zur Verfügung zu stellen.
- Die ` QNetworkDiskCache ` kann als Anforderungs-Cache mit ` QNetworkDiskCache` verwendet werden.
- Mithilfe von „ QNetworkProxy “ kann der von „ QNetworkAccessManager “ gesendete Datenverkehr durch einen Proxy geleitet werden.
- Cookies können für zukünftige Anfragen gespeichert werden, indem ein ` QNetworkCookieJar` hinzugefügt wird.
Um eine Factory zu implementieren, erstellen Sie eine Unterklasse von `QQmlNetworkAccessManagerFactory` und implementieren Sie die virtuelle Methode ` create()`. Weisen Sie diese anschließend mithilfe von ` QQmlEngine::setNetworkAccessManagerFactory()` der entsprechenden QML-Engine zu. Beispielsweise cachen die durch den folgenden Codeausschnitt erstellten ` QNetworkAccessManager `-Objekte Anfragen.
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 möglicherweise „ QNetworkAccessManager “-Instanzen aus mehreren Threads erstellt. 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 räumt alle von ihr erstellten „ QNetworkReply “-Objekte auf. Der Empfang des Signals „ QNetworkAccessManager::finished()“ in einem anderen Thread liefert dem Empfänger möglicherweise kein gültiges Antwortobjekt, wenn dieses bereits gelöscht wurde.
- Die an „ QNetworkAccessManager::authenticationRequired()“ übergebenen Authentifizierungsdaten müssen sofort bereitgestellt werden, daher kann dieses Signal nicht als „ Qt::QueuedConnection “ (oder als das Standard-„ Qt::AutoConnection “ aus einem anderen Thread) verbunden werden.
Weitere Informationen zu Signalen und Threads finden Sie unter „Threads und QObjects “ sowie „Signale und Slots über Threads hinweg“.
Siehe auch QNetworkDiskCache.
Dokumentation zu Mitgliedsfunktionen
[virtual noexcept] QQmlNetworkAccessManagerFactory::~QQmlNetworkAccessManagerFactory()
Löst den Konstruktor auf. Die Standardimplementierung führt keine Aktion aus.
[pure virtual] QNetworkAccessManager *QQmlNetworkAccessManagerFactory::create(QObject *parent)
Erstellt und gibt einen Netzwerkzugriffsmanager mit dem angegebenen ` parent` zurück. Diese Methode muss bei jedem Aufruf eine neue Instanz von ` QNetworkAccessManager ` zurückgeben.
Hinweis: Diese Methode kann von mehreren Threads aufgerufen werden; stellen Sie daher sicher, dass die Implementierung dieser Methode reentrant ist.
© 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.