【问题标题】:How Access components inside NodeInstantiator Delegate?如何访问 NodeInstantiator Delegate 里面的组件?
【发布时间】:2021-06-29 06:44:20
【问题描述】:

我在 C++ 中有一个 line 类,我想在 qml 中使用它。 我想用鼠标画一条线,并有多条线。 其实我想new我的line 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 的 Line Component,而且我也不知道如何生成线条并将它们添加到它的 entityModel 中。

如果我不使用 NodeInstantiator ,当我通过鼠标左键绘制线条然后使用右键绘制停止时。然后在第二次,当我使用 左键我想要新的线实体。

如图所示,我现在可以只画一次。

【问题讨论】:

  • 请编辑帖子解释为什么需要参考lineMesh
  • 我要使用这个组件的功能。
  • 也许您可以使用objectAt 访问委托中的函数。但是我不知道是否可以到达lineMesh
  • 不行,不行,我测试一下。
  • 看看这个 github examplethis 。他们说:Qt3D NodeInstantiator 中有一个错误:与 ObjectModel 一起使用时会崩溃。因此,目前有一个明确的 ListModel

标签: qt qml qt3d


【解决方案1】:

我在 CPP 中修复了我的问题,这意味着我创建了一个在我的程序中扮演包装角色的类,它负责收集点。 我在这里new我的线路班。

Qt3D NodeInstantiator 中存在一个错误:与 ObjectModel 一起使用时会崩溃。因此,目前有一个明确的 ListModel。

【讨论】:

    【解决方案2】:

    这可能不是一个完整的答案,因为您的问题实际上有两个问题。但我认为它最终会对你有所帮助。

    为了画一条线,你需要两个坐标。我建议在单击鼠标时存储当前坐标,并在下次单击时,从存储的坐标到当前坐标划一条线(可能已更改)。然后您可以使用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 信号在鼠标移动时插入实体,只要按下左键。我会把它留给你作为练习。

    【讨论】:

    • 我使用 qt3d,应该使用 MouseHandler 而不是 MouseArea,而且我想使用我的 line 组件类中的函数。
    • 好的,那么这个答案仅用于解释append函数;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多