2011-09-29 220 views
3

只是试图围绕QTouchEvent包裹我的头。任何帮助/建议表示赞赏。Qt C++ QTouchEvent和TouchPoint混淆

具体来说,当触发事件触发时(例如TouchBegin),我有点困惑;这是否只代表一个独特的触点?如果是的话为什么QTouchEvent里面有一个触点列表?

如果不是,Qt是否会将给定时间分数内发生的几个TouchBegin实例组合在一起,并将其作为一个事件传递,并将事件中的点列表封装起来?同样,QTouchUpdate事件将包含当时正在更新的几个触点的信息?

另外我假设;

QTouchEvent::TouchPoint::id 

将在整个TouchBegin,TouchUpdate和TouchEnd中保持一致。这意味着在不同的触摸事件中,如果我看到一个具有相同ID的点,则这两个事件都指向同一触点。这个假设是否正确?

仅供参考:我一直在与TUIO合作一段时间,所以如果有人熟悉Qt和TUIO,比较性的解释会让我更容易理解。我也读过Qt文档,但无法找到我的问题的答案。

不过,我真的很感激任何帮助。

谢谢。

回答

2

在不同的平台上报告事件的方式似乎有所不同。如果您用两个手指按下它,它可以从一个触摸点(TouchBegin)开始,然后立即使用带有两个TouchUpdate点的新的QTouchEvent。但它也可以将两个触摸点分组到TouchBegin QTouchEvent中。但我也目睹了两次TouchBegin事件,尽管这是一种禁止事件(请参阅QTouchEvent文档中的“Touch Point Grouping”)。

开始之后,TouchUpdates又有了不同之处。有时候,即使你抬起一根手指,你总能得到两点(或者手指朝下)。在这种情况下,抬起的手指“id”的压力为0。或者,您将获得实际停机的接触点ID数量。

了解如何生成这些内容的最佳方法是install an eventfilter并在按下时观察事件。

+0

谢谢塔图。安装和事件过滤器是我现在正在做的事情。无论如何,我实际上需要一个过滤器,因为我试图在任何地方传播之前拦截所有触摸事件,并在该事件中注入一些额外的数据。 – pinkydoe