本页内容

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支持。

要实现工厂,请继承 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()返回的对象的信号连接到了可能在不同线程中创建的对象的槽,开发者应格外小心:

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