- class QQmlNetworkAccessManagerFactory#
QQmlNetworkAccessManagerFactory
类为 QML 引擎创建 QNetworkAccessManager 实例。更多…摘要#
虚拟方法#
def
create()
注意
本文档可能包含自动从 C++ 翻译到 Python 的代码片段。我们热切欢迎对片段翻译的贡献。如果您发现翻译中的问题,也可以通过在 https:/bugreports.qt.io/projects/PYSIDE 上创建工单来告知我们。
详细描述#
警告
本节包含从C++自动转换到Python的片段,可能包含错误。
QML引擎使用QNetworkAccessManager进行所有网络访问。通过实现工厂,可以为QML引擎提供自定义的QNetworkAccessManager实例,具有专门的缓存、代理和Cookie支持。
可以使用QNetworkDiskCache作为与QNetworkDiskCache一起使用的请求缓存。
通过使用QNetworkProxy,可以 tunnels QNetworkAccessManager发送的流量通过代理。
可以通过添加QNetworkCookieJar来保存Cookie以供未来请求使用。
要实现工厂,扩展
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)连接。
有关信号和线程的更多信息,请参阅线程和QObjects以及线程间信号和槽。
另请参阅
创建并返回一个具有指定
parent
的网络访问管理器。每次调用此方法时,它必须返回一个新的QNetworkAccessManager实例。注意:此方法可能由多个线程调用,因此请确保此方法的实现是重入的。