Страницы

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

четверг, 26 декабря 2019 г.

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

#android #cpp #qt #widgets


Пытаюсь разобраться с 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 );
}

    


Ответы

Ответ 1



Вначале обработку сенсора надо включить с помощью функции 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; } Более подробно обо всей кухне

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

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