Составители:
Рубрика:
134
надо будет привести к QGestureEvent и затем извлечь из него
gesture, однако все это уже сделано для удобства прикладного
программиста. Логика обработчика анализирует движения
пользователя вдоль горизонтальной оси и в зависимости от
направления движения переключает страницы приложения вперед
или назад.
Направление движения привязано к физическому устройству, а
не к его текущей ориентации в пространстве. То есть если
перевернуть планшет «вверх ногами», то право и лево для
пользователя и gesture перестанут совпадать, несмотря на то, что
пользовательский интерфейс среагирует на датчик ориентации.
Этот факт надо учитывать при программировании реальных
приложений.
Более сложной задачей является создание собственной gesture.
Она решается в три этапа – описание распознавателя для gesture,
регистрация его в системе и обработка сообщений от него.
Самое сложное – создание распознавателя, он реализуется в
подклассе QGestureRecognizer. Как минимум необходимо
переопределить метод recognize():
Result MyGest::recognize(QGesture *gesture, QObject
*watched, QEvent *event) {
if (event->type() == QEvent::TouchUpdate) {
QTouchEvent *te =
static_cast<QTouchEvent*>(event);
if (te->touchPoints().size() == 2) {
gesture->setHotSpot(te-
>touchPoints().first().screenPos());
return FinishGesture;
}
}
return Ignore;
}
Приведенный пример – простейший, он считает gesture любое
прикосновение к экрану двумя пальцами. К сожалению, сенсорный
экран нашего планшета не поддерживает работу более двух пальцев
одновременно. Более продвинутые алгоритмы могут учитывать
координаты точек, другие сообщения от сенсорного экрана и т.п.
Страницы
- « первая
- ‹ предыдущая
- …
- 132
- 133
- 134
- 135
- 136
- …
- следующая ›
- последняя »