Qt Quick 3D - Ejemplo de RuntimeLoader
Demuestra cómo se pueden cargar activos en tiempo de ejecución.

Este ejemplo muestra cómo implementar un visor de activos simple utilizando el RuntimeLoader.
Vea la documentación del ejemplo introductorio para una explicación de cómo configurar una escena básica. Una vez que tenemos la escena configurada podemos añadir el elemento RuntimeLoader:
RuntimeLoader { id: importNode source: windowRoot.importUrl instancing: instancingButton.checked ? instancing : null onBoundsChanged: helper.updateBounds(bounds) }
La carga de un activo se realiza estableciendo la propiedad source de RuntimeLoader. En este ejemplo, source está vinculado a importUrl, que cambiará cuando el usuario seleccione un archivo en el diálogo de archivos.
Suponiendo que el activo se pueda cargar, el contenido se creará como hijo de RuntimeLoader importNode . Tenga en cuenta que el RuntimeLoader es un tipo Node, y puesto que también es el nodo raíz del activo cargado, cualquier transformación aplicada al importNode también afectará a sus hijos.
Tratamiento de errores
Si un activo no se carga, la propiedad status de RuntimeLoader se establecerá en Error. errorString de RuntimeLoader puede consultarse para obtener una descripción más detallada del error.
En este ejemplo, mostraremos el mensaje de error en un cuadro rojo en el centro de la pantalla:
Rectangle { id: messageBox visible: importNode.status !== RuntimeLoader.Success color: "red" width: parent.width * 0.8 height: parent.height * 0.8 anchors.centerIn: parent radius: Math.min(width, height) / 10 opacity: 0.6 Text { anchors.fill: parent font.pixelSize: 36 text: "Status: " + importNode.errorString + "\nPress \"Import...\" to import a model" color: "white" wrapMode: Text.Wrap horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter } }
Mover la cámara
Para hacer posible cambiar la posición de la cámara usamos el WasdController del módulo Helpers y lo enlazamos a nuestra cámara, así:
OrbitCameraController { id: orbitController origin: orbitCameraNode camera: orbitCamera enabled: helper.orbitControllerEnabled } WasdController { id: wasdController controlledObject: wasdCamera enabled: !helper.orbitControllerEnabled }
Además del WasdController, el ejemplo utiliza un WheelHandler y un PointerHandler para escalar y rotar el modelo.
Instanciación de
El elemento RuntimeLoader también se puede utilizar en combinación con instanciación, como se muestra aquí:
RandomInstancing { id: instancing instanceCount: 30 position: InstanceRange { property alias boundsDiameter: helper.boundsDiameter from: Qt.vector3d(-3*boundsDiameter, -3*boundsDiameter, -3*boundsDiameter); to: Qt.vector3d(3*boundsDiameter, 3*boundsDiameter, 3*boundsDiameter) } color: InstanceRange { from: "black"; to: "white" } }
RuntimeLoader no hereda de Model, pero tiene su propia propiedad instancing que nos permite instanciar un activo importado complejo como si fuera un modelo simple. En este caso utilizamos el componente RandomInstancing del módulo Helpers para posicionar aleatoriamente elementos dentro de un área fija y con un color aleatorio.
Anulación de materiales
A veces, al cargar un asset, es posible que no tenga el aspecto esperado. La propiedad materialOverride cambiará cómo se renderiza cada material en la escena para mostrar una contribución particular al renderizado general. Esto puede ser útil para determinar qué es exactamente lo que no es correcto en el asset, de modo que el asset original pueda ser ajustado si es necesario.

© 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.