将QML事件传播到C++

4

我希望将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类,该类具有鼠标和键盘的虚拟事件处理程序,然后创建一系列不同的工具,根据需要覆盖它们。它们将显示在某种工具箱中,即带有图标的网格中,用户可以选择当前工具。被选择的工具是接收事件的工具。欢迎任何设计建议。
1个回答

1
尝试使用QEvent,然后使用event->type()进行事件类型过滤。

当我尝试这样做时,我会得到一个“错误:未知的方法参数类型:QEvent *”。 - spbots
你是否包含了QEvent? - Simon Warta
是的,在 C++ 插件类的头文件中包含。 - spbots
我不是这里的 OP,但我的代码相对类似。也许我会发一个新问题? - spbots
当然,请告诉我链接。 - Simon Warta
谢谢!http://stackoverflow.com/questions/26914239/pass-events-between-qml-objects - spbots

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接