Loader3D QML Type
允许从 URL 或组件动态加载 3D 子树。更多
Import Statement: | import QtQuick3D |
Inherits: |
属性
- active : bool
- asynchronous : bool
- item : object
- progress : real
- source : url
- sourceComponent : Component
- status : enumeration
信号
- loaded()
方法
- object setSource(url source, object properties)
详细说明
Loader3D 用于为Qt Quick 3D 动态加载 QML 组件。
Loader3D 可以加载 QML 文件(使用source 属性)或Component 对象(使用sourceComponent 属性)。它可用于延迟创建组件,直到需要时才创建:例如,应按需创建组件,或出于性能原因不应创建不必要的组件。
注: Loader3D 的工作方式与Loader 相同。二者的区别在于,Loader 提供了一种动态加载继承了Item 的对象的方法,而 Loader3D 则提供了一种加载继承了Object3D 并且是 3D 场景一部分的对象的方法。
属性文档
active : bool |
如果Loader3D 当前处于活动状态,则该属性为true
。此属性的默认值为true
。
如果Loader3D 处于非活动状态,更改source 或sourceComponent 将不会导致该项目被实例化,直到Loader3D 被激活。
将该值设置为非活动状态将导致加载器加载的任何item 被释放,但不会影响source 或sourceComponent 。
非活动加载器的status 始终是Null
。
另请参阅 source 和sourceComponent 。
asynchronous : bool |
此属性表示组件是否会被异步实例化。默认情况下,它是false
。
与source 属性结合使用时,加载和编译也将在后台线程中执行。
异步加载会在多个帧中创建组件声明的对象,从而降低动画出现闪烁的可能性。异步加载时,状态将变为Loader3D.Loading。整个组件创建完成后,item ,状态将变为 Loader.Ready。
当异步加载正在进行时,将此属性的值更改为false
将强制立即同步完成。这样,如果必须在异步加载完成之前访问Loader3D 内容,就可以开始异步加载,然后强制完成加载。
为避免看到项目逐步加载,可适当设置visible
,例如
Loader3D { source: "mycomponent.qml" asynchronous: true visible: status == Loader3D.Ready }
请注意,该属性只影响对象的实例化;它与通过网络异步加载组件无关。
item : object |
该属性显示当前加载的顶层对象。
progress : real |
该属性显示从网络加载 QML 数据的进度,从 0.0(未加载)到 1.0(已完成)。大多数 QML 文件都很小,因此该值会从 0 迅速变为 1。
另请参阅 status 。
source : url |
该属性包含要实例化的 QML 组件的 URL。
要卸载当前加载的对象,可将此属性设为空字符串,或将sourceComponent 设为undefined
。将source
设为新的 URL 也会导致卸载前一个 URL 创建的项目。
另请参阅 sourceComponent,status, 和progress 。
sourceComponent : Component |
status : enumeration |
该属性显示 QML 加载的状态。它可以是
常量 | 说明 |
---|---|
Loader3D.Null | 加载器未激活或未设置 QML 源。 |
Loader3D.Ready | QML 源已加载。 |
Loader3D.Loading | 当前正在加载 QML 源。 |
Loader3D.Error | 加载 QML 源时发生错误。 |
使用此状态提供更新或以某种方式回应状态变化。例如,您可以
- 触发状态变化:
State { name: 'loaded'; when: loader.status == Loader3D.Ready }
- 实现
onStatusChanged
信号处理器:Loader3D { id: loader onStatusChanged: if (loader.status == Loader3D.Ready) console.log('Loaded') }
- 绑定状态值:
Text { text: loader.status == Loader3D.Ready ? 'Loaded' : 'Not loaded' }
请注意,如果源文件是本地文件,初始状态将是 Ready(或 Error)。虽然在这种情况下不会出现 onStatusChanged 信号,但仍会调用 onLoaded 信号。
另请参阅 progress 。
信号文档
loaded() |
方法文档
object setSource(url source, object properties) |
为给定的source 组件创建一个对象实例,该实例将具有给定的properties 。properties 参数为可选参数。加载和实例化完成后,可通过item 属性访问该实例。
如果调用此函数时active 属性为false
,则不会加载给定的source 组件,但会缓存source 和初始properties 。当加载器变成active 时,将创建一个设置了初始properties 的source 组件实例。
以这种方式设置组件实例的初始属性值不会触发任何相关的Behavior。
请注意,如果在调用此函数后但在设置加载器active 之前更改了source 或sourceComponent ,缓存的properties 将被清除。
© 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.