Я нахожусь в процессе внедрения системы ввода на основе касания, использующей Qt 4.6.3, работающей в Microsoft Windows 7. Чтобы сохранить конечные автоматы в управляемой сложности, я решил использовать инфраструктуру распознавания жестов инфраструктуры. Я следил за Программирование жестов направлять и реализовывать и регистрировать мой QGestureRecognizer
-производные классы для каждого жеста.
Большинство распознавателей жестов работают должным образом, за одним исключением: My Единственная кастрюля пальца разоблачает необъяснимое (для меня) поведение. Так как я хочу сохранить маленькое окно допуска до запуска жеста панорамирования, событие для начального контакта (мыши или касания) должно сообщить о 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;
}
// ...
};
Хотя мышь и сенсорный ввод обрабатываются одинаково, и оба возвращают то же самое Result
-флаг, общее поведение отличается. В частности, при взаимодействии с сенсорной поверхностью, жест в состоянии MayBeGesture
удаляется из списка жестов через 3 секунды (см. QGestureManager::timerEvent
) и тем самым, по-видимому, отменяет другие жесты. Хотя жесты мыши также удаляются из m_maybeGestures
-список это не подвергает нежелательному эффекту.
Вопросы:
m_maybeGestures
-список?m_maybeGestures
-список?m_maybeGestures
-лист обрабатывается по-разному в зависимости от типа ввода?Чтобы ответить на мой собственный вопрос:
MayBeGesture
состояние было удалено в Qt 4.7. Если проблема заключается в произвольном удалении жестов, обновитесь до Qt 4.7 или новее.