如何在 NodeInstantiator Delegate 中访问组件?
How Access components inside NodeInstantiator Delegate?
我在 C++ 中有一个 line
class,我想在 qml 中使用它。
我想用 鼠标 画一条线,并且有 多条线 。
其实我想new
我的行class,所以我用NodeInstantiator
.
ListModel {
id: entityModel
}
NodeInstantiator {
id: instance
model: entityModel
delegate: Entity {
id: sphereEntity
components: [
Line { id:lineMesh } ,
PhongMaterial { id: material; ambient:"red" },
Transform { id: transform; }
]
}
}
我的问题是我不能在 NodeInstantiator 之外使用其 id lineMesh 的线组件,而且我不知道如何生成线并将它们添加到它的 entityModel。
如果我不使用 NodeInstantiator ,当我用鼠标左键画线然后用右键画线时停止。然后在第二次,当我使用
左键我想要换行实体。
如图所示,现在我可以画线 一次。
这可能不是一个完整的答案,因为你的问题实际上有两个问题。但我认为它最终会对你有所帮助。
为了画一条线,您需要两个坐标。我建议在单击鼠标时存储当前坐标,并在发生下一次单击时,从存储的坐标到当前坐标(可能已更改)绘制一条线。然后,您可以使用 append
函数将项目添加到 ListModel
:
MouseArea {
property var lastPoint : undefined
onClicked: {
if(lastPoint === undefined) //first click
{
lastPoint = {"x": mouse.x, "y": mouse.y}
}
else
{
entityModel.append({"startX": lastPoint.x,
"startY": lastPoint.y,
"endX": mouse.x,
"endY": mouse.y});
lastPoint = undefined
}
}
}
当然有一些变化,例如在 MouseArea
上使用 moved
信号在鼠标移动时插入实体,只要按下左键即可。我会把它留给你作为练习。
I Fixed My problem in CPP,也就是说我创建了一个class,它在我的程序中起到包装器的作用,它负责收集积分。
我 new
我的行 class 在这里 .
Qt3D NodeInstantiator存在一个bug:与ObjectModel一起使用会崩溃。因此,目前有一个明确的 ListModel。
我在 C++ 中有一个 line
class,我想在 qml 中使用它。
我想用 鼠标 画一条线,并且有 多条线 。
其实我想new
我的行class,所以我用NodeInstantiator
.
ListModel {
id: entityModel
}
NodeInstantiator {
id: instance
model: entityModel
delegate: Entity {
id: sphereEntity
components: [
Line { id:lineMesh } ,
PhongMaterial { id: material; ambient:"red" },
Transform { id: transform; }
]
}
}
我的问题是我不能在 NodeInstantiator 之外使用其 id lineMesh 的线组件,而且我不知道如何生成线并将它们添加到它的 entityModel。
如果我不使用 NodeInstantiator ,当我用鼠标左键画线然后用右键画线时停止。然后在第二次,当我使用 左键我想要换行实体。
如图所示,现在我可以画线 一次。
这可能不是一个完整的答案,因为你的问题实际上有两个问题。但我认为它最终会对你有所帮助。
为了画一条线,您需要两个坐标。我建议在单击鼠标时存储当前坐标,并在发生下一次单击时,从存储的坐标到当前坐标(可能已更改)绘制一条线。然后,您可以使用 append
函数将项目添加到 ListModel
:
MouseArea {
property var lastPoint : undefined
onClicked: {
if(lastPoint === undefined) //first click
{
lastPoint = {"x": mouse.x, "y": mouse.y}
}
else
{
entityModel.append({"startX": lastPoint.x,
"startY": lastPoint.y,
"endX": mouse.x,
"endY": mouse.y});
lastPoint = undefined
}
}
}
当然有一些变化,例如在 MouseArea
上使用 moved
信号在鼠标移动时插入实体,只要按下左键即可。我会把它留给你作为练习。
I Fixed My problem in CPP,也就是说我创建了一个class,它在我的程序中起到包装器的作用,它负责收集积分。
我 new
我的行 class 在这里 .
Qt3D NodeInstantiator存在一个bug:与ObjectModel一起使用会崩溃。因此,目前有一个明确的 ListModel。