Sur cette page

Qt Quick 3D - Exemple de sélection

Illustre la sélection de modèles.

Cet exemple illustre la sélection. Il existe 3 modèles animés différents pouvant être sélectionnés. Lorsqu'un modèle est sélectionné, l'animation s'arrête et la couleur du modèle change afin d'indiquer clairement quel modèle a été sélectionné. Des informations détaillées sur le résultat de la sélection s'affichent en haut de la fenêtre de l'application.

Trois objets accompagnés d'informations de sélection indiquant la position du cube sélectionné

Rendre un modèle sélectionnable

Pour rendre un modèle sélectionnable, la propriété « pickable » doit être définie sur « true ». Nous ajoutons également « objectName » au modèle afin de pouvoir afficher le nom du modèle sélectionné.

Model {
    id: cubeModel
    objectName: "Cube"
    source: "#Cube"
    pickable: true
    property bool isPicked: false

La propriété isPicked a été ajoutée pour permettre d’activer ou de désactiver l’animation et la couleur.

materials: PrincipledMaterial {
    baseColor: cubeModel.isPicked ? "#41cd52" : "#09102b"
    ...
SequentialAnimation on eulerRotation {
    running: !cubeModel.isPicked

Obtenir les résultats de la sélection

Pour effectuer la sélection proprement dite, nous devons ajouter une zone de sélection ( MouseArea ) couvrant l’intégralité de la zone de sélection ( View3D).

MouseArea {
    anchors.fill: view

Dans le gestionnaire d’ onClicked s de la zone de sélection, nous utilisons la méthode pick pour obtenir le résultat effectif de la sélection.

var result = view.pick(mouse.x, mouse.y);

Si le résultat contient une target object, nous examinons les détails de ce résultat et les affichons dans le champ de texte situé en haut de la vue de l'application.

if (result.objectHit) {
    var pickedObject = result.objectHit;
    // Toggle the isPicked property for the model
    pickedObject.isPicked = !pickedObject.isPicked;
    // Get picked model name
    pickName.text = pickedObject.objectName;
    // Get other pick specifics
    uvPosition.text = "("
            + result.uvPosition.x.toFixed(2) + ", "
            + result.uvPosition.y.toFixed(2) + ")";
    distance.text = result.distance.toFixed(2);
    scenePosition.text = "("
            + result.scenePosition.x.toFixed(2) + ", "
            + result.scenePosition.y.toFixed(2) + ", "
            + result.scenePosition.z.toFixed(2) + ")";
    localPosition.text = "("
            + result.position.x.toFixed(2) + ", "
            + result.position.y.toFixed(2) + ", "
            + result.position.z.toFixed(2) + ")";
    worldNormal.text = "("
            + result.sceneNormal.x.toFixed(2) + ", "
            + result.sceneNormal.y.toFixed(2) + ", "
            + result.sceneNormal.z.toFixed(2) + ")";
    localNormal.text = "("
            + result.normal.x.toFixed(2) + ", "
            + result.normal.y.toFixed(2) + ", "
            + result.normal.z.toFixed(2) + ")";

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.