Russian Qt Forum

Qt => Qt Embedded => Тема начата: xintrea от Ноябрь 03, 2014, 23:10



Название: Эмуляция жеста swipe. Инерционная прокрутка.
Отправлено: xintrea от Ноябрь 03, 2014, 23:10
Итак, по материалам этой темы (http://www.prog.org.ru/topic_27877_0.html), в которой я разговаривал сам с собой, мы выяснили, что с жестом Swipe в Qt все очень плохо. В прошлый новый год мне задарили планшет, и первое с чем я столкнулся - это баги с жестами в Qt. Прошел почти год. Что-то изменилось? Нет.

Я уже морально готов писать самодельный распознаватель жестов из QMouseEvent (события мышки на реальном Андроид-железе отлавливаются нормально).

Перед тем, как я начну хардкорить, я хотел бы узнать две вещи:

1. Возможно уже есть какие-то наработки по ручному распознаванию жестов. Дайте ссылку если таковые знаете. Интересует жест Swipe.

2. Нигде не могу найти пример инерционной прокрутки. Хочу ее прикрутить к QTableView, QTreeView, QListView. Есть ли готовые решения? Или нужно тоже хардкорить? Есть ли рабочий пример?



Название: Re: Эмуляция жеста swipe. Инерционная прокрутка.
Отправлено: vregess от Ноябрь 04, 2014, 08:03
1. Возможно уже есть какие-то наработки по ручному распознаванию жестов. Дайте ссылку если таковые знаете. Интересует жест Swipe.
Посмотри QSwipeGesture, QPinchGesture.

2. Нигде не могу найти пример инерционной прокрутки. Хочу ее прикрутить к QTableView, QTreeView, QListView. Есть ли готовые решения? Или нужно тоже хардкорить? Есть ли рабочий пример?
Для QML есть Flickable, а для виджетов придется найти flickcharm. Вот тут есть: http://blog.qt.digia.com/blog/2008/11/15/flick-list-or-kinetic-scrolling/ (http://blog.qt.digia.com/blog/2008/11/15/flick-list-or-kinetic-scrolling/)


Название: Re: Эмуляция жеста swipe. Инерционная прокрутка.
Отправлено: twp от Ноябрь 14, 2014, 23:45
2. Нигде не могу найти пример инерционной прокрутки. Хочу ее прикрутить к QTableView, QTreeView, QListView. Есть ли готовые решения? Или нужно тоже хардкорить? Есть ли рабочий пример?

В Qt5 есть класс QScroller. Юзать его достаточно легко. Чтоб прикрутить к наследнику QAbstractItemView надо
 задействовать его viewport():
Код
C++ (Qt)
QScroller::grabGesture(viewport(), QScroller::LeftMouseButtonGesture);
 
Ну еще полезно убрать скроллбар, а также установить попиксельный режим прокрутки:
Код
C++ (Qt)
setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);