Qt Quick 3D - Exemple de chargement au moment de l'exécution
Démontre comment les actifs peuvent être chargés au moment de l'exécution.

Cet exemple montre comment mettre en œuvre une visionneuse de ressources simple à l'aide de RuntimeLoader.
Voir la documentation de l'exemple d'introduction pour une explication sur la façon de configurer une scène de base. Une fois la scène configurée, nous pouvons ajouter l'élément RuntimeLoader:
RuntimeLoader { id: importNode source: windowRoot.importUrl instancing: instancingButton.checked ? instancing : null onBoundsChanged: helper.updateBounds(bounds) }
Le chargement d'une ressource s'effectue en définissant la propriété source de RuntimeLoader. Dans cet exemple, l'élément source est lié à l'élément importUrl qui sera modifié lorsque l'utilisateur sélectionnera un fichier dans le dialogue des fichiers.
En supposant que la ressource puisse être chargée, le contenu sera créé en tant qu'enfant de RuntimeLoader importNode . Notez que RuntimeLoader est un type Node, et puisqu'il est également le nœud racine de la ressource chargée, toutes les transformations appliquées à importNode affecteront également ses enfants.
Gestion des erreurs
Si le chargement d'un élément échoue, la propriété status de RuntimeLoader sera définie sur Error. La propriété errorString de RuntimeLoader peut alors être interrogée pour obtenir une description plus détaillée de l'erreur.
Dans cet exemple, nous afficherons le message d'erreur dans une boîte de message rouge au milieu de l'écran, comme ceci :
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 } }
Déplacement de la caméra
Pour pouvoir modifier la position de la caméra, nous utilisons le module WasdController du module Helpers et le lions à notre caméra, comme ceci :
OrbitCameraController { id: orbitController origin: orbitCameraNode camera: orbitCamera enabled: helper.orbitControllerEnabled } WasdController { id: wasdController controlledObject: wasdCamera enabled: !helper.orbitControllerEnabled }
En plus de WasdController, l'exemple utilise WheelHandler et PointerHandler pour mettre le modèle à l'échelle et le faire pivoter.
Instanciation
L'élément RuntimeLoader peut également être utilisé en combinaison avec l'instanciation, comme le montre l'exemple suivant :
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 n'hérite pas de Model, mais il possède sa propre propriété instancing qui nous permet d'instancier un actif importé complexe comme s'il s'agissait d'un simple modèle. Dans ce cas, nous utilisons le composant RandomInstancing du module Helpers pour positionner les éléments de manière aléatoire dans une zone fixe et avec une couleur aléatoire.
Remplacements de matériaux
Parfois, lors du chargement d'une ressource, il est possible qu'elle n'ait pas l'aspect escompté. La propriété materialOverride modifie le rendu de chaque matériau de la scène afin d'afficher une contribution particulière au rendu global. Cela peut s'avérer utile pour déterminer ce qui n'est pas correct dans la ressource, de sorte que la ressource d'origine puisse être ajustée si nécessaire.

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