QQmlNetworkAccessManagerFactory Class
QQmlNetworkAccessManagerFactory 类用于为 QML 引擎创建QNetworkAccessManager 实例。更多内容...
| 标题: | #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引擎提供自定义的QNetworkAccessManager 实例,这些实例具备专门的缓存、代理和Cookie支持。
- 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 )从另一个线程进行连接。
有关信号和线程的更多信息,请参阅《线程与 QObject》以及《跨线程的信号与槽》。
另请参阅 QNetworkDiskCache 。
成员函数文档
[virtual noexcept] QQmlNetworkAccessManagerFactory::~QQmlNetworkAccessManagerFactory()
销毁该工厂。默认实现不执行任何操作。
[pure virtual] QNetworkAccessManager *QQmlNetworkAccessManagerFactory::create(QObject *parent)
创建并返回一个具有指定parent 的网络访问管理器。该方法每次被调用时都必须返回一个新的QNetworkAccessManager 实例。
注意:此方法可能被多个线程调用,因此请确保该方法的实现是可重入的。
© 2026 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.