Qt Quick 3D - Ejemplo de picking
Ejemplo de recogida de modelos.
Este ejemplo muestra el picking. Hay 3 modelos animados diferentes que pueden ser escogidos. Cuando se selecciona un modelo, la animación se detiene y el color del modelo cambia para dejar claro qué modelo se ha seleccionado. En la parte superior de la ventana de la aplicación se muestra información detallada sobre el resultado de la selección.

Seleccionar un modelo
Para hacer un modelo seleccionable, la propiedad pickable necesita ser establecida a true. También añadimos objectName para que el modelo pueda mostrar el nombre del modelo seleccionado.
Model { id: cubeModel objectName: "Cube" source: "#Cube" pickable: true property bool isPicked: false
La propiedad isPicked fue añadida para ser utilizada para alternar la animación y el color.
materials: PrincipledMaterial { baseColor: cubeModel.isPicked ? "#41cd52" : "#09102b" ... SequentialAnimation on eulerRotation { running: !cubeModel.isPicked
Obtención de los resultados de la selección
Para hacer el picking necesitamos añadir un MouseArea para cubrir todo el View3D.
MouseArea { anchors.fill: view
En el manejador onClicked del área del ratón, utilizamos el método pick para obtener el resultado real del picking.
var result = view.pick(mouse.x, mouse.y);
Si el resultado tiene un target object, repasamos los detalles del resultado, y los mostramos en el campo de texto en la parte superior de la vista de la aplicación.
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.