QQmlAbstractUrlInterceptor Class
允许您控制 QML 文件的加载。更多
头文件: | #include <QQmlAbstractUrlInterceptor> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
qmake: | QT += qml |
公共类型
enum | DataType { QmldirFile, JavaScriptFile, QmlFile, UrlString } |
公共函数
QQmlAbstractUrlInterceptor() | |
virtual | ~QQmlAbstractUrlInterceptor() |
virtual QUrl | intercept(const QUrl &url, QQmlAbstractUrlInterceptor::DataType type) = 0 |
详细说明
QQmlAbstractUrlInterceptor 是一个接口,可用于在 QML 引擎使用之前更改 URL。它主要用于将文件 URL 更改为其他文件 URL,如为当前平台选择不同的图形资产。
相对 URL 会在根据当前 QML 上下文的文件路径解析后被拦截。为加载的 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 替换或同一文件的双重 URL 替换。
常量 | 值 | 说明 |
---|---|---|
QQmlAbstractUrlInterceptor::QmldirFile | 2 | 截获的 URL 是 Qmldir 文件的 URL。截取此 URL 而不截取 QmlFile,可交换整个子树。 |
QQmlAbstractUrlInterceptor::JavaScriptFile | 1 | 截取的 URL 是 Javascript 文件的导入。 |
QQmlAbstractUrlInterceptor::QmlFile | 0 | 拦截的 URL 是 Qml 文件。截取该 URL 而不截取 Qmldir 文件,就不会触动 QML 文件的基本目录,就像用另一个文件替换该文件一样。 |
QQmlAbstractUrlInterceptor::UrlString | 0x1000 | 被拦截的 URL 是 QML 文件中的 url 属性,而不是用于通过引擎加载文件。 |
成员函数文档
[constexpr noexcept]
QQmlAbstractUrlInterceptor::QQmlAbstractUrlInterceptor()
QQmlAbstractUrlInterceptor 的构造函数。
[virtual constexpr noexcept]
QQmlAbstractUrlInterceptor::~QQmlAbstractUrlInterceptor()
QQmlAbstractUrlInterceptor 的 Destructor 。
[pure virtual]
QUrl QQmlAbstractUrlInterceptor::intercept(const QUrl &url, QQmlAbstractUrlInterceptor::DataType type)
这是一个纯虚拟函数,可用于拦截url 。返回值将作为 url 的新值。截取的 url 类型由type 变量给出。
该函数的实现必须是线程安全的,因为它可以同时被多个线程调用。
© 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.