微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何防止在MayBeGesture状态下超时移除手势?

我正在使用基于触摸的input系统,使用在Microsoft Windows 7上运行的Qt 4.6.3。为了让状态机保持一个可控的复杂性,我决定使用框架的手势识别基础结构。 我一直在关注“ 手势编程指南”,并为每个手势实现并注册了我的QGestureRecognizer派生类。

大多数手势识别器按预期工作,但有一个例外:我的单指平底锅暴露了莫名其妙(对我)的行为。 由于我希望在触发Pan手势之前保持一个小容忍窗口,所以初始接触的事件(鼠标或触摸)必须报告一个MayBeGesture结果,并且只会请求前进到Qt::GestureStarted状态,方法是返回TriggerGesture 。

这是相关的代码部分:

class CSingleFingerPanGestureRecognizer : public QGestureRecognizer { public: virtual QGestureRecognizer::Result recognize( QGesture* state,QObject*,QEvent* event ) { CSingleFingerPanGesture& panState = *static_cast< CSingleFingerPanGesture* >( state ); QGestureRecognizer::Result result; switch ( event->type() ) { case QEvent::TouchBegin: { const QTouchEvent& touchEvent = *static_cast< const QTouchEvent* >( event ); // Filter out multi-touch gestures if ( touchEvent.touchPoints().size() == 1 ) { QTouchEvent::TouchPoint p = touchEvent.touchPoints().at(0); panState.startPos = p.pos(); result = QGestureRecognizer::MayBeGesture; } break; } case QEvent::MouseButtonPress: { const QMouseEvent& mouseEvent = *static_cast< const QMouseEvent* >( event ); panState.startPos = mouseEvent.posF(); result = QGestureRecognizer::MayBeGesture; break; } // ... } return result; } // ... };

虽然鼠标和触摸input的处理方式相同,但都返回相同的Result标志,但总体行为不同。 特别是,当与触摸表面交互时,状态MayBeGesture上的手势在3秒后从手势列表中移除(参见QGestureManager::timerEvent ),这样做明显地取消了其他手势。 虽然鼠标手势也从m_maybeGestures删除,这不会暴露不良影响。

Windows 10触摸板手势编程

如何在Windows Store应用程序中处理/捕获长时间的压力

如何在单击和双击手势竞争的情况下正确取消手势?

在Windows 8.1中查找触摸数字化仪的物理尺寸

无法find像igiZoom,igiPan或igiRotate交互式手势事件的VCL组件在Delphi XE7

问题:

为什么手势会自动从m_maybeGestures -list中移除?

有没有办法阻止从m_maybeGestures -list中移除手势?

为什么从m_maybeGestures -list中删除一个手势取决于inputtypes的不同呢?

Windows Mobile 6.5手势和C#2.0应用程序

在我的Ogre应用程序中包含Windows API调用

Synaptics使用registry的Windows自定义手势

回答我自己的问题:

这个行为几乎没有任何理由,如[#QTBUG-9926]中所解释的那样, 从QGestureManager中删除用于许可的定时器 。

在MayBeGesture状态下控制任意移除手势的定时器在Qt 4.7中被删除。 如果任意删除手势是一个问题,请升级到Qt 4.7或更高版本。

经过进一步调查,处理鼠标和触摸输入没有区别。 唯一的区别在于输入特性。 触摸输入生成连续的更新事件流时,单击左键按下事件不会。 这是处理更新事件,最终触发删除手势。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐