QQmlAbstractUrlInterceptor 类
允许您控制 QML 文件加载。 更多...
头文件 | #include <QQmlAbstractUrlInterceptor> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
qmake | QT += qml |
公共类型
枚举 | DataType { QmldirFile, JavaScriptFile, QmlFile, UrlString } |
公共函数
QQmlAbstractUrlInterceptor() | |
虚拟 | ~QQmlAbstractUrlInterceptor() |
虚拟 QUrl | intercept(const QUrl &url, QQmlAbstractUrlInterceptor::DataType type) = 0 |
详细描述
QQmlAbstractUrlInterceptor 是一个接口,可用于在 QML 引擎使用之前更改 URL。这主要用于将文件 URL 转换为其他文件 URL,例如为当前平台选择不同的图形资产。
在将相对 URL 解析为当前 QML 上下文中的文件路径之后,将拦截相对 URL。在设置已加载 QML 文件的基路径之后,也会发生 URL 拦截。这意味着为该 QML 文件加载的内容使用拦截的 URL,但在文件内部使用预拦截的 URL 来解析相对路径。这允许在不需要拦截内容内部的所有路径(或本地类型)的情况下拦截 .qml 文件加载,以插入不同的相对路径。
与 setNetworkAccessManagerFactory 相比,QQmlAbstractUrlInterceptor 影响所有 URL 和路径,包括本地文件和嵌入式资源文件。QQmlAbstractUrlInterceptor 是同步的,并且对于异步文件必须返回一个具有异步方案(如 http 或您自己的自定义 QNetworkAccessManager 处理的自定义方案)的 URL。您可以使用 QQmlAbstractUrlInterceptor 将文件 URL 更改为由您自己的自定义 QNetworkAccessManager 处理的联网 URL。
要实现对自定义联网方案的客户端支持,请参阅 setNetworkAccessManagerFactory。
成员类型文档
enum QQmlAbstractUrlInterceptor::DataType
指定 URL 拦截发生的位置。
由于 QML 加载 qmldir 文件以定位类型,因此加载 QML 类型时涉及两个 URL。用于定位类型的(可能隐含的)qmldir 的 URL 和定义类型的文件的 URL。拦截这两个会导致相同文件的复杂 URL 替换或双倍 URL 替换。
常数 | 值 | 描述 |
---|---|---|
QQmlAbstractUrlInterceptor::QmldirFile | 2 | 正在拦截的 URL 用于 Qmldir 文件。只拦截此文件而不是 QmlFile,允许替换整个子树。 |
QQmlAbstractUrlInterceptor::JavaScriptFile | 1 | 正在拦截的 URL 是引入 JavaScript 文件的导入。 |
QQmlAbstractUrlInterceptor::QmlFile | 0 | 被拦截的URL是为Qml文件。拦截此URL(而不是Qmldir文件),将保持QML文件的基本目录不变,并类似于用另一个文件替换该文件。 |
QQmlAbstractUrlInterceptor::UrlString | 0x1000 | 被拦截的URL是QML文件中的一个URL属性,并未用于通过引擎加载文件。 |
成员函数文档
[常量表达式 noexcept]
QQmlAbstractUrlInterceptor::QQmlAbstractUrlInterceptor()
QQmlAbstractUrlInterceptor的构造函数。
[虚常量表达式 noexcept]
QQmlAbstractUrlInterceptor::~QQmlAbstractUrlInterceptor()
QQmlAbstractUrlInterceptor的析构函数。
[纯虚函数]
QUrl QQmlAbstractUrlInterceptor::intercept(const QUrl &url, QQmlAbstractUrlInterceptor::DataType type)
这是一个纯虚函数,您可以在其中拦截url。返回值被用作url的新值。拦截的url类型由type变量给出。
您的函数实现必须是线程安全的,因为它可能会被多个线程同时调用。
© 2024 Qt公司。此处包含的文档贡献归其各自所有者所有。提供的文档按照自由软件基金会发布的GNU自由文档许可证版本1.3的条款进行许可。Qt及相应的标志是芬兰的Qt公司在全球的商标。所有其他商标均为其各自所有者的财产。