C++ 如何防止在MayBeGesture状态下删除手势超时?
我正在使用运行在MicrosoftWindows7上的Qt4.6.3实现一个基于触摸的输入系统。为了使状态机保持在可管理的复杂性,我决定使用该框架的手势识别基础设施。我一直遵循指南,为每个手势实现并注册了我的派生类 大多数手势识别器都能正常工作,但有一个例外:我的单指摇摄会暴露出(对我)无法解释的行为。由于我希望在触发平移手势之前保留一个小的公差窗口,因此初始接触(鼠标或触摸)的事件必须报告C++ 如何防止在MayBeGesture状态下删除手势超时?,c++,windows,qt,gesture,qt4.6,C++,Windows,Qt,Gesture,Qt4.6,我正在使用运行在MicrosoftWindows7上的Qt4.6.3实现一个基于触摸的输入系统。为了使状态机保持在可管理的复杂性,我决定使用该框架的手势识别基础设施。我一直遵循指南,为每个手势实现并注册了我的派生类 大多数手势识别器都能正常工作,但有一个例外:我的单指摇摄会暴露出(对我)无法解释的行为。由于我希望在触发平移手势之前保留一个小的公差窗口,因此初始接触(鼠标或触摸)的事件必须报告MayBeGesture结果,并且只会通过返回triggershistore请求向前移动到Qt::Gest
MayBeGesture
结果,并且只会通过返回triggershistore
请求向前移动到Qt::GestureStarted
状态
这是相关的代码部分:
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;
}
// ...
};
class CSingleFingerPangestureRecognitor:公共QgestureRecognitor
{
公众:
虚拟QgestureRecognitor::结果识别(Q手势*状态,
QObject*,
QEvent*事件){
csinglefingerpangestree&panState=*静态施法(状态);
QgestureRecognitor::结果;
开关(事件->类型(){
案例QEvent::TouchBegin:{
const QTouchEvent&touchEvent=*静态播放(事件);
//过滤掉多点触摸手势
if(touchEvent.touchPoints().size()==1){
QTouchEvent::TouchPoint p=touchEvent.touchPoints()。位于(0);
panState.startPos=p.pos();
结果=QgestureRecognitor::MayBeGesture;
}
打破
}
案例QEvent::鼠标按钮按下:{
const QMouseEvent和mouseeEvent=*static_cast(事件);
panState.startPos=mouseEvent.posF();
结果=QgestureRecognitor::MayBeGesture;
打破
}
// ...
}
返回结果;
}
// ...
};
尽管鼠标和触摸输入的处理方式相同,并且都返回相同的结果
-标志,但总体行为不同。特别是,当与触摸屏交互时,状态为MayBeGesture
的手势会在3秒钟后从手势列表中删除(请参见QGestureManager::timerEvent
),这样做显然会取消其他手势。虽然也会从m_maybeGestures
-列表中删除鼠标手势,但这不会暴露不良效果
问题:
m_maybeGestures
-列表中删除m_maybeGestures
-列表中删除m_maybeGestures
-列表中删除手势会根据输入类型进行不同的处理回答我自己的问题:
MayBeGesture
状态下任意删除手势的计时器。如果任意删除手势有问题,请升级到Qt 4.7或更高版本