Sur cette page

Qt Quick 3D - Exemple de création de modèle dynamique

Illustre la création dynamique de modèles.

Cet exemple montre comment créer des modèles de manière dynamique dans une application. 10 modèles sont créés dynamiquement au démarrage de l'application, et il est possible d'en ajouter ou d'en supprimer à l'aide des boutons + et -.

42 modèles colorés du logo Qt dispersés dans un espace sombre, illustrant la création dynamique d'objets

Configuration

Nœud Spawner

Nous allons avoir besoin d’un nœud « Node » pour contenir les modèles créés dynamiquement.

Node {
    id: shapeSpawner
    property real range: 300
    property var instances: []
    property int count
    ...
Démarrage

Nous créons 10 modèles lors de l'Component.onCompleted afin que l'exemple affiche quelque chose dès le démarrage.

Component.onCompleted: {
    for (var i = 0; i < 10; ++i)
        shapeSpawner.addShape()
}

Modèles dynamiques

Ajout de modèles

Pour ajouter un nouvel élément à la scène, nous utilisons d’abord la fonction ` Qt.createComponent ` afin de créer une instance ` Component ` pour notre modèle. Ensuite, nous utilisons la fonction ` createObject ` du composant pour instancier l’élément, en lui transmettant la position et l’échelle en tant que paramètres.

function addShape()
{
    var xPos = (2 * Math.random() * range) - range;
    var yPos = (2 * Math.random() * range) - range;
    var zPos = (2 * Math.random() * range) - range;
    var shapeComponent = Qt.createComponent("WeirdShape.qml");
    let instance = shapeComponent.createObject(shapeSpawner,
        { "x": xPos, "y": yPos, "z": zPos, "scale": Qt.vector3d(0.25, 0.25, 0.25)});
    instances.push(instance);
    count = instances.length
}
Suppression de modèles

Les modèles créés dynamiquement sont supprimés simplement en les retirant de la pile d'instances et en les détruisant.

function removeShape()
{
    if (instances.length > 0) {
        let instance = instances.pop();
        instance.destroy();
        count = instances.length
    }
}

Exemple de projet sur code.qt.io

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