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 实例。

要实现工厂,可子类 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() 返回的对象的信号与可能在不同线程中创建的对象的插槽相连,开发人员应该小心:

有关信号和线程的更多信息,请参阅线程和 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.