PySide6.QtQml.QQmlNetworkAccessManagerFactory

class QQmlNetworkAccessManagerFactory

QQmlNetworkAccessManagerFactory 类为 QML 引擎创建 QNetworkAccessManager 实例。更多

概要

虚拟方法

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

QML引擎使用QNetworkAccessManager进行所有网络访问。通过实现一个工厂,可以为QML引擎提供具有专门缓存、代理和cookie支持的自定义QNetworkAccessManager实例。

  • QNetworkDiskCache 可以用作 QNetworkDiskCache 的请求缓存。

  • 使用 QNetworkProxy,通过 QNetworkAccessManager 发送的流量可以通过代理进行隧道传输。

  • 可以通过添加QNetworkCookieJar来保存Cookies以供将来的请求使用。

要实现一个工厂,子类化 QQmlNetworkAccessManagerFactory 并实现虚拟的 create() 方法,然后使用 setNetworkAccessManagerFactory() 将其分配给相关的 QML 引擎。例如,以下代码片段创建的 QNetworkAccessManager 对象将缓存请求。

class CachingNetworkAccessManagerFactory(QQmlNetworkAccessManagerFactory):

# public
    QNetworkAccessManager create(QObject parent) override

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

然后可以将工厂传递给QML引擎,以便它可以使用自定义行为实例化QNetworkAccessManager。

networkManagerFactory = CachingNetworkAccessManagerFactory()
engine.setNetworkAccessManagerFactory(networkManagerFactory)

请注意,QML引擎可能会从多个线程创建QNetworkAccessManager实例。因此,create()方法的实现必须是可重入的。此外,如果从create()返回的对象的信号连接到可能在不同线程中创建的对象的槽,开发者应小心:

  • QML引擎在内部处理所有请求,并清理它创建的任何QNetworkReply对象。如果在另一个线程中接收到QNetworkAccessManager::finished()信号,可能无法为接收者提供有效的回复对象,如果它已经被删除。

  • 提供给QNetworkAccessManager::authenticationRequired()的认证详细信息必须立即提供,因此此信号不能作为Qt::QueuedConnection(或从另一个线程作为默认的Qt::AutoConnection)连接。

有关信号和线程的更多信息,请参阅Threads and QObjectsSignals and Slots Across Threads

另请参阅

QNetworkDiskCache

abstract create(parent)
Parameters:

父对象QObject

Return type:

QNetworkAccessManager

创建并返回一个具有指定parent的网络访问管理器。每次调用此方法时,必须返回一个新的QNetworkAccessManager实例。

注意:此方法可能被多个线程调用,因此请确保此方法的实现是可重入的。