【发布时间】:2014-04-29 15:48:50
【问题描述】:
上下文:我正在尝试创建一个类似推子的小部件,它可以在同一视图中有多个实例,每个实例都可以由不同的手指同时控制。
我想使用 Qt 的gesture recognition system,但我还需要一些超出标准Qt::PanGesture 的功能。为此,我对QGesture 和QGestureRecognizer 进行了子类化。在FooGestureRecognizer::recognize(...),我目前正在拦截QMouseEvents 和QTouchEvents(至少目前是这样)。
在 Windows 上,我只收到 QMouseEvents - 我处理它们并且一切都按预期工作(尽管当我的输入来自物理鼠标时,显然我不必处理多点触控问题)。我收到的事件(按顺序):
QEvent::MouseButtonPress- 一串
QEvent::MouseMoves QEvent::MouseButtonRelease
在 Android 上,我收到了 QMouseEvents 和 QTouchEvents 的奇怪组合(按顺序):
QEvent::TouchBeginQEvent::MouseButtonPress-
QEvent::MouseMove(位置没有实际变化) - 另一个
QEvent::MouseButtonPress(不知道为什么我需要另一个) - 我的实际字符串
QEvent::MouseMoves,如预期的那样 QEvent::MouseButtonRelease
全局属性Qt::AA_SynthesizeMouseForUnhandledTouchEvents默认为true。关闭它会将我收到的事件更改为:
QEvent::TouchBegin
...没有别的了。
这是一个前兆问题:我可以在QGestureRecognizer::recognize() 中做什么来告诉Qt 我正在处理QEvent::TouchBegin,并且它不需要为我合成QEvent::MouseButtonPress? event->accept() 似乎没有任何区别。
实际问题:如果(看起来)Qt 正在从TouchEvents 合成MouseEvents,为什么我看到我看到QEvent::MouseMove 和QEvent::MouseButtonRelease 而不是QEvent::TouchUpdate 或@987654353 @?
代码可用,但为了简洁起见,我没有将其包含在此处。如有需要请询问。
【问题讨论】: