【问题标题】:Propagate QML events to C++将 QML 事件传播到 C++
【发布时间】:2014-04-25 01:05:23
【问题描述】:

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

【问题讨论】:

    标签: c++ qt qml qt-quick qt-events


    【解决方案1】:

    尝试QEvent,然后使用event->type() 过滤event type

    【讨论】:

    • 当我尝试这个时,我得到一个Error: Unknown method parameter type: QEvent*
    • 你加入了 QEvent 吗?
    • 是的,包含在插件的 C++ 类的标头中。
    • 我不是 OP,但我的代码比较相似。也许我会发布一个新问题?
    • 一定要告诉我链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多