我希望将QML信号处理程序中的事件传播到C++过程,但不知道如何传递“事件对象”。请看一下这种情况,并特别注意 SomeType
。
首先,我创建一个自定义的QML项,其中包含可以从QML调用的插槽:
class Tool : public QQuickItem
{
. . .
public slots:
virtual void onMousePositionChanged(SomeType *event);
}
接下来,在QML中,我创建了一个MouseArea
和我的自定义对象的一个实例,我想将事件传播到该对象。
MouseArea {
hoverEnabled: true
onPositionChanged: {
var event = . . .
tool.onMousePositionChanged(event);
}
}
Tool {
id: tool
}
这里有一个问题。我不知道如何组装一个
SomeType
的实例来传递给方法。实际上,我不知道应该选择什么作为SomeType
。理想情况下,这将是QQuickMouseEvent
,所以我可以直接调用tool.onMousePositionChanged(mouse)
,但由于某些原因,此类型在C++代码中不可用。我还考虑过使用
QMouseEvent
,这样我就只需要重新编写属性,但是这个类似乎无法在QML代码中使用。我对Qt Quick还很新,也许我完全在误用它。我的目标是拥有一个基本的
Tool
类,该类具有鼠标和键盘的虚拟事件处理程序,然后创建一系列不同的工具,根据需要覆盖它们。它们将显示在某种工具箱中,即带有图标的网格中,用户可以选择当前工具。被选择的工具是接收事件的工具。欢迎任何设计建议。