Qt Quick 3D - 挑选示例
演示模型的选择。
此示例演示了选择功能。存在3种不同的动画模型可以进行选择。当模型被选中时,动画将停止,模型颜色改变以清楚地显示哪个模型被选中。选择结果的详细信息显示在应用程序窗口的顶部。
使模型可挑选
为了使模型可挑选,需要将pickable属性设置为true
。我们还为模型添加了objectName
,以便能够显示选中模型的名称。
Model { id: cubeModel objectName: "Cube" source: "#Cube" pickable: true property bool isPicked: false
添加了isPicked
属性,用于切换动画和颜色。
materials: DefaultMaterial { diffuseColor: cubeModel.isPicked ? "#41cd52" : "#09102b" ... SequentialAnimation on eulerRotation { running: !cubeModel.isPicked
获取挑选结果
要执行实际的选择,我们需要添加一个MouseArea来覆盖整个View3D。
MouseArea { anchors.fill: view
在鼠标区域的onClicked
处理器中,我们使用pick方法来获取实际的选择结果。
var result = view.pick(mouse.x, mouse.y);
如果结果有一个目标对象,我们将通过结果的详细信息,并将它们显示在应用程序视图顶部的文本字段中。
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) + ")";
文件
- picking/CMakeLists.txt
- picking/main.cpp
- picking/main.qml
- picking/materials.qrc
- picking/picking.pro
- picking/qml.qrc
图像
© 2024 The Qt Company Ltd. 本文档贡献的版权为各自所有者的版权。本文档提供的文档根据由自由软件基金会发布并遵守的 GNU 自由文档许可证版本 1.3 许可。Qt 和相关标志是 The Qt Company Ltd 在芬兰或其他国家/地区的商标。所有其他商标均为其各自所有者的财产。