QQmlNetworkAccessManagerFactory类

QQmlNetworkAccessManagerFactory类创建QNetworkAccessManager实例,用于QML引擎。更多信息...

头文件 #include <QQmlNetworkAccessManagerFactory>
CMakefind_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmakeQT += 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 公司和/或全球其他地区的商标。所有其他商标均为各自所有者的财产。