Qt Quick 3D - Exemple de prélèvement
Démonstration du prélèvement de modèles.
Cet exemple illustre le prélèvement. Trois modèles animés différents peuvent être sélectionnés. Lorsqu'un modèle est sélectionné, l'animation s'arrête et la couleur du modèle change pour indiquer clairement quel modèle a été sélectionné. Des informations détaillées sur le résultat du prélèvement sont affichées en haut de la fenêtre de l'application.

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 pour que le modèle puisse 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 de basculer l'animation et la couleur.
materials: PrincipledMaterial { baseColor: cubeModel.isPicked ? "#41cd52" : "#09102b" ... SequentialAnimation on eulerRotation { running: !cubeModel.isPicked
Obtenir les résultats du prélèvement
Pour effectuer le prélèvement proprement dit, nous devons ajouter un MouseArea pour couvrir l'ensemble du View3D.
MouseArea { anchors.fill: view
Dans le gestionnaire onClicked de la zone de la souris, nous utilisons la méthode pick pour obtenir le résultat du prélèvement.
var result = view.pick(mouse.x, mouse.y);
Si le résultat est target object, nous passons en revue les détails du résultat et les affichons dans le champ de texte 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) + ")";
© 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.