Auf dieser Seite

Qt Quick 3D - Beispiel für die Modellauswahl

Veranschaulicht die Auswahl von Modellen.

Dieses Beispiel veranschaulicht die Auswahl. Es stehen 3 verschiedene animierte Modelle zur Auswahl. Wenn ein Modell ausgewählt wird, wird die Animation angehalten und die Farbe des Modells geändert, um deutlich zu machen, welches Modell ausgewählt wurde. Detaillierte Informationen zum Auswahlergebnis werden oben im Anwendungsfenster angezeigt.

Drei Objekte mit Auswahlinformationen, die die Position des ausgewählten Würfels anzeigen

Modell auswählbar machen

Um ein Modell auswählbar zu machen, muss die Eigenschaft „ pickable “ auf „ true “ gesetzt werden. Außerdem fügen wir „ objectName “ hinzu, damit das Modell den Namen des ausgewählten Modells anzeigen kann.

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

Die Eigenschaft „ isPicked “ wurde hinzugefügt, um die Animation und die Farbe umzuschalten.

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

Abrufen der Auswahlergebnisse

Für die eigentliche Auswahl müssen wir einen „ MouseArea “ hinzufügen, der den gesamten Bereich „ View3D “ abdeckt.

MouseArea {
    anchors.fill: view

Im ` onClicked `-Handler des Mausbereichs verwenden wir die Methode ` pick `, um das tatsächliche Ergebnis der Auswahl abzurufen.

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

Wenn das Ergebnis einen „ target object “ enthält, gehen wir die Einzelheiten des Ergebnisses durch und zeigen sie im Textfeld oben in der Anwendungsansicht an.

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) + ")";

Beispielprojekt @ 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.