QQmlNetworkAccessManagerFactory Class
QQmlNetworkAccessManagerFactory 类为 QML 引擎创建QNetworkAccessManager 实例。更多
Header: | #include <QQmlNetworkAccessManagerFactory> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
qmake: | QT += qml |
公共函数
virtual | ~QQmlNetworkAccessManagerFactory() |
virtual QNetworkAccessManager * | create(QObject *parent) = 0 |
详细说明
QML 引擎使用QNetworkAccessManager 进行所有网络访问。通过实现一个工厂,可以为 QML 引擎提供具有专门缓存、代理和 cookies 支持的自定义QNetworkAccessManager 实例。
- QNetworkDiskCache 可与QNetworkDiskCache 一起用作请求缓存。
- 使用QNetworkProxy ,QNetworkAccessManager 发送的流量可通过代理进行隧道传输。
- 通过添加QNetworkCookieJar ,可以为未来的请求保存 Cookie。
要实现工厂,可子类 QQmlNetworkAccessManagerFactory 并实现虚拟的create() 方法,然后使用QQmlEngine::setNetworkAccessManagerFactory() 将其分配给相关的 QML 引擎。例如,以下代码段创建的QNetworkAccessManager 对象将缓存请求。
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; } };
然后,可将工厂传递给 QML 引擎,使其能实例化具有自定义行为的QNetworkAccessManager 。
CachingNetworkAccessManagerFactory networkManagerFactory; engine->setNetworkAccessManagerFactory(&networkManagerFactory);
请注意,QML 引擎可能会从多个线程创建QNetworkAccessManager 实例。因此,create() 方法的实现必须是reentrant 。此外,如果要从create() 返回的对象的信号与可能在不同线程中创建的对象的插槽相连,开发人员应该小心:
- QML 引擎会在内部处理所有请求,并清理它创建的任何QNetworkReply 对象。在其他线程中接收QNetworkAccessManager::finished() 信号时,如果回复对象已被删除,接收者可能无法获得有效的回复对象。
- 向QNetworkAccessManager::authenticationRequired() 提供的身份验证详细信息必须立即提供,因此该信号不能作为Qt::QueuedConnection (或作为其他线程的默认Qt::AutoConnection )连接。
有关信号和线程的更多信息,请参阅线程和 QObjects以及跨线程的信号和插槽。
另请参阅 QNetworkDiskCache 。
成员函数文档
[virtual noexcept]
QQmlNetworkAccessManagerFactory::~QQmlNetworkAccessManagerFactory()
销毁工厂。默认情况下什么也不做。
[pure virtual]
QNetworkAccessManager *QQmlNetworkAccessManagerFactory::create(QObject *parent)
创建并返回具有指定parent 的网络访问管理器。该方法每次调用都必须返回一个新的QNetworkAccessManager 实例。
注意:此方法可能会被多个线程调用,因此请确保此方法的实现是可重入的。
© 2025 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.