QQmlNetworkAccessManagerFactory类
QQmlNetworkAccessManagerFactory类创建QNetworkAccessManager实例,用于QML引擎。更多信息...
头文件 | #include <QQmlNetworkAccessManagerFactory> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
qmake | QT += qml |
公共函数
虚拟 | ~QQmlNetworkAccessManagerFactory() |
虚拟 QNetworkAccessManager * | create(QObject *parent) = 0 |
详细描述
QML引擎使用QNetworkAccessManager进行所有网络访问。通过实现一个工厂,可以为QML引擎提供自定义的QNetworkAccessManager实例,这些实例具有专门的缓存、代理和cookies支持。
- 可以使用QNetworkDiskCache作为请求缓存。
- 使用QNetworkProxy,可以通过代理隧道传输QNetworkAccessManager发送的数据。
- 通过添加QNetworkCookieJar,可以保存cookies以供未来的请求使用。
要实现一个工厂,可以继承QQmlNetworkAccessManagerFactory并实现虚拟的create()方法,然后将它分配给相关的QML引擎使用QQmlEngine::setNetworkAccessManagerFactory()。例如,以下代码片段创建的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()方法的实现必须是可重入的。此外,如果从create()返回的对象的信号连接到了可能在不同的线程中创建的对象的槽,开发者应该小心。
- QML引擎内部处理所有请求,并清理它创建的任何QNetworkReply对象。如果在另一个线程收到QNetworkAccessManager::finished()信号,如果该信号已经被删除,接收器可能无法接收到有效的回复对象。
- 提供给QNetworkAccessManager::authenticationRequired()的认证细节必须立即提供,因此此信号不能作为Qt::QueuedConnection连接(或作为来自另一个线程的默认Qt::AutoConnection)。
有关信号和线程的更多信息,请参阅 线程和 QObjects 和 线程间信号和槽。
另请参阅 QNetworkDiskCache。
成员函数文档
[虚拟 noexcept]
QQmlNetworkAccessManagerFactory::~QQmlNetworkAccessManagerFactory()
销毁工厂。默认实现不执行任何操作。
[纯虚拟]
QNetworkAccessManager *QQmlNetworkAccessManagerFactory::create(QObject *parent)
创建并返回指定 父对象 的网络访问管理器。每次调用此方法时,必须返回一个新的 QNetworkAccessManager 实例。
注意:此方法可能由多个线程调用,因此请确保此方法的实现是可重入的。
© 2024 Qt 公司。本文件中包含的文档贡献是各自所有者的版权。所提供的文档受自由软件基金会发布的GNU 自由文档许可证版本 1.3 的条款约束。Qt 及其相应标志是芬兰的 Qt 公司和/或全球其他地区的商标。所有其他商标均为各自所有者的财产。