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 转换为网络 URL,这些 URL 将由您自定义的QNetworkAccessManager 进行处理。
若要实现对自定义网络方案的支持,请参阅 setNetworkAccessManagerFactory。
成员类型文档
enum QQmlAbstractUrlInterceptor::DataType
指定 URL 拦截发生的位置。
由于 QML 会加载 qmldir 文件以定位类型,因此在加载一个 QML 类型时会涉及两个 URL。 一个是用于定位该类型的(可能为隐式)qmldir的URL,另一个是定义该类型的文件的URL。如果同时拦截这两个URL,将会导致复杂的URL替换,或者对同一文件进行重复的URL替换。
| 常量 | 值 | 描述 |
|---|---|---|
QQmlAbstractUrlInterceptor::QmldirFile | 2 | 被拦截的 URL 属于 Qmldir 文件。拦截此 URL(而非 QmlFile)可以替换整个子树。 |
QQmlAbstractUrlInterceptor::JavaScriptFile | 1 | 被拦截的 URL 是 JavaScript 文件的导入语句。 |
QQmlAbstractUrlInterceptor::QmlFile | 0 | 被拦截的 URL 指向一个 Qml 文件。拦截此 URL(而非 Qmldir 文件)将保留 QML 文件的基目录不变,其效果等同于用另一个文件替换该文件。 |
QQmlAbstractUrlInterceptor::UrlString | 0x1000 | 被拦截的 URL 是 QML 文件中的 url 属性,并非用于通过引擎加载文件。 |
成员函数文档
[constexpr noexcept default] QQmlAbstractUrlInterceptor::QQmlAbstractUrlInterceptor()
QQmlAbstractUrlInterceptor 的构造函数。
[virtual constexpr noexcept default] QQmlAbstractUrlInterceptor::~QQmlAbstractUrlInterceptor()
QQmlAbstractUrlInterceptor 的析构函数。
[pure virtual] QUrl QQmlAbstractUrlInterceptor::intercept(const QUrl &url, QQmlAbstractUrlInterceptor::DataType type)
一个纯虚函数,可用于拦截url 。返回值将被用作url的新值。被拦截的url的类型由type 变量指定。
此函数的实现必须是线程安全的,因为它可能同时被多个线程调用。
© 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.