【发布时间】:2016-12-20 10:13:28
【问题描述】:
C++ API 具有QEvent 以及从它派生的多个其他类(QMouseEvent、QGestureEvent 等)。另一方面,QML 也有事件。但是,我正在努力寻找一种在 QML 中直接处理 C++ 事件的优雅方式。
通常我所做的是创建一个自定义QQuickWidget(或类似的,包括QQmlEngine),覆盖QWidget::event(QEvent* event),并在接收到特定的C++事件后,我通过信号将它传播到QML插槽并加载QML代码通过那个小部件。这似乎需要做很多工作,我想知道是否有某种 QML 内置事件处理来处理来自 C++ 上下文的事件。
我对在 QML 中处理 QGestureEvents 尤其感兴趣,但我猜对这种类型的事件有效的方法也应该适用于任何其他类型的事件。
【问题讨论】:
-
您尝试过使用MultiPointTouchArea 吗?它有一个信号
gestureStarted(GestureEvent gesture)可能会满足您的需求。 -
问题是我想捕捉真正来自 C++ 上下文的手势事件。例如,如果我将数据从设备(只能通过 C++ 方式访问)映射到 Qt 的手势 API,然后将其传递到应用程序的 QML 部分。它甚至可能没有远程连接到触摸(例如使用 Kinect 设备做出手势)。
-
“这似乎需要做很多工作”——与为 QML 实现 C++ 事件处理所需的工作量相比,这实际上是没有。