QQmlNetworkAccessManagerFactory#

The QQmlNetworkAccessManagerFactory class creates QNetworkAccessManager instances for a QML engine. More

Inheritance diagram of PySide6.QtQml.QQmlNetworkAccessManagerFactory

Synopsis#

Virtual functions#

Note

This documentation may contain snippets that were automatically translated from C++ to Python. We always welcome contributions to the snippet translation. If you see an issue with the translation, you can also let us know by creating a ticket on https:/bugreports.qt.io/projects/PYSIDE

Detailed Description#

Warning

This section contains snippets that were automatically translated from C++ to Python and may contain errors.

A QML engine uses QNetworkAccessManager for all network access. By implementing a factory, it is possible to provide the QML engine with custom QNetworkAccessManager instances with specialized caching, proxy and cookies support.

  • The QNetworkDiskCache can be used as a request cache with QNetworkDiskCache .

  • Using QNetworkProxy , traffic sent by the QNetworkAccessManager can be tunnelled through a proxy.

  • Cookies can be saved for future requests by adding a QNetworkCookieJar .

To implement a factory, subclass QQmlNetworkAccessManagerFactory and implement the virtual create() method, then assign it to the relevant QML engine using setNetworkAccessManagerFactory() . For instance, the QNetworkAccessManager objects created by the following snippet will cache requests.

class CachingNetworkAccessManagerFactory(QQmlNetworkAccessManagerFactory):

# public
    QNetworkAccessManager create(QObject parent) override

        networkAccessManager = QNetworkAccessManager(parent)
        diskCache = QNetworkDiskCache(parent)
        diskCache.setCacheDirectory("requestCache")
        networkAccessManager.setCache(diskCache)
        return networkAccessManager

The factory can then be passed to the QML engine so it can instantiate the QNetworkAccessManager with the custom behavior.

networkManagerFactory = CachingNetworkAccessManagerFactory()
engine.setNetworkAccessManagerFactory(networkManagerFactory)

Note the QML engine may create QNetworkAccessManager instances from multiple threads. Because of this, the implementation of the create() method must be reentrant . In addition, the developer should be careful if the signals of the object to be returned from create() are connected to the slots of an object that may be created in a different thread:

  • The QML engine internally handles all requests, and cleans up any QNetworkReply objects it creates. Receiving the finished() signal in another thread may not provide the receiver with a valid reply object if it has already been deleted.

  • Authentication details provided to authenticationRequired() must be provided immediately, so this signal cannot be connected as a QueuedConnection (or as the default AutoConnection from another thread).

For more information about signals and threads, see Threads and QObjects and Signals and Slots Across Threads .

See also

QNetworkDiskCache

class PySide6.QtQml.QQmlNetworkAccessManagerFactory#
abstract PySide6.QtQml.QQmlNetworkAccessManagerFactory.create(parent)#
Parameters:

parentPySide6.QtCore.QObject

Return type:

PySide6.QtNetwork.QNetworkAccessManager

Creates and returns a network access manager with the specified parent. This method must return a new QNetworkAccessManager instance each time it is called.

Note: this method may be called by multiple threads, so ensure the implementation of this method is reentrant.