PySide6.QtQml.QQmlNetworkAccessManagerFactory¶
- class QQmlNetworkAccessManagerFactory¶
QQmlNetworkAccessManagerFactory类为 QML 引擎创建 QNetworkAccessManager 实例。更多…概要¶
虚拟方法¶
def
create()
注意
本文档可能包含从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 QObjects和Signals and Slots Across Threads。
另请参阅
创建并返回一个具有指定
parent的网络访问管理器。每次调用此方法时,必须返回一个新的QNetworkAccessManager实例。注意:此方法可能被多个线程调用,因此请确保此方法的实现是可重入的。