Страницы

Поиск по вопросам

четверг, 29 ноября 2018 г.

Как сделать прокрутку QListWidget свайпом

Пытаюсь разобраться с Qt под Android. На форме размещен QListWidget, при этом привычная сенсорная прокрутка свайпом не работает.
Собсвтенно как реализовать прокрутку свайпом?
Файл проекта .pro:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = AndroidMainWindow TEMPLATE = app
SOURCES += main.cpp\ mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
CONFIG += mobility MOBILITY =
В .cpp только заполнение QListWidget больше никаких изменений

for( short i = 0; i < 50; i++ ) { QListWidgetItem * item = new QListWidgetItem(); item->setSizeHint( QSize(0, 70) ); item->setText( "Элемент списка номер " + QString::number(i) ); ui->listWidget->addItem( item ); }


Ответ

Вначале обработку сенсора надо включить с помощью функции QWidget::grabGesture
QListWidget * my_list = ... my_list->grabGesture(Qt::SwipeGesture);
Второй вариант, использовать класс QScroller
QScroller::grabGesture(my_list, QScroller::LeftMouseButtonGesture);
Если QScroller не устраивает можно обрабатывать события от сенсора QGestureEvent самостоятельно (пример с doc.qt.io):
bool MyWidget::event(QEvent *event) { if (event->type() == QEvent::Gesture) return gestureEvent(static_cast(event)); return QWidget::event(event); }
bool MyWidget::gestureEvent(QGestureEvent *event) { if (QGesture *swipe = event->gesture(Qt::SwipeGesture)) swipeTriggered(static_cast(swipe)); else if (QGesture *pan = event->gesture(Qt::PanGesture)) panTriggered(static_cast(pan)); if (QGesture *pinch = event->gesture(Qt::PinchGesture)) pinchTriggered(static_cast(pinch));
return true; }
Более подробно обо всей кухне

Комментариев нет:

Отправить комментарий