Класс QGestureRecognizer
Класс QGestureRecognizer предоставляет инфраструктуру для распознавания жестов. Подробнее...
| Заголовок: | #include <QGestureRecognizer> |
| CMake: | find_package(Qt6 COMPONENTS Widgets REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
Типы публичного доступа
| флаги | Результат |
| перечисление | ФлагРезультата { Игнорировать, ВозможноЖест, СрабатываетЖест, ЗавершитьЖест, ОтменитьЖест, ПотреблятьСобытие } |
Функции публичного доступа
| QGestureRecognizer() | |
| virtual | ~QGestureRecognizer() |
| virtual QGesture * | create(QObject *target) |
| virtual QGestureRecognizer::Результат | recognize(QGesture *gesture, QObject *watched, QEvent *event) = 0 |
| virtual void | reset(QGesture *gesture) |
Статические члены публичного доступа
| Qt::GestureType | registerRecognizer(QGestureRecognizer *recognizer) |
| void | unregisterRecognizer(Qt::GestureType type) |
Подробное описание
Распознаватели жестов отвечают за создание и управление объектами QGesture и отслеживание событий ввода, отправляемых в подклассы QWidget и QGraphicsObject. QGestureRecognizer является базовым классом для реализации пользовательских жестов.
Разработчики, которым требуется только распознавание стандартных жестов, не должны использовать этот класс напрямую. Экземпляры будут создаваться за кулисами фреймворком.
Обзор обработки жестов в Qt и информация об использовании жестов в ваших приложениях см. в документе Жесты в виджетах и графическом представлении.
Распознавание жестов
Процесс распознавания жестов включает фильтрацию событий ввода, отправленных конкретным объектам, и изменение связанных объектов QGesture для включения релевантной информации об вводе пользователя.
Жесты создаются, когда фреймворк вызывает create() для обработки ввода пользователя для конкретного экземпляра подкласса QWidget или QGraphicsObject. Для каждого виджета или элемента, настроенного для использования жестов, создается объект QGesture.
После создания объекта QGesture для целевого объекта, распознавателю жестов будут отправляться события в его обработчике функции recognize().
Когда жест отменяется, вызывается функция reset(), предоставляя распознавателю возможность обновить соответствующие свойства в соответствующем объекте QGesture.
Поддержка новых жестов
Чтобы добавить поддержку новых жестов, необходимо унаследовать от QGestureRecognizer для создания пользовательского класса распознавателя, создать экземпляр этого класса и зарегистрировать его в приложении, вызвав QGestureRecognizer::registerRecognizer(). Также можно унаследовать от QGesture для создания пользовательского класса жеста или полагаться на динамические свойства для выражения конкретных деталей жеста, который вы хотите обработать.
Ваш пользовательский подкласс QGestureRecognizer должен переопределить функцию recognize() для обработки и фильтрации входящих событий ввода для подклассов QWidget и QGraphicsObject. Хотя логика распознавания жеста реализуется в этой функции, вы можете сохранять постоянную информацию о состоянии процесса распознавания в объекте QGesture, переданном в функцию. Функция recognize() должна возвращать значение QGestureRecognizer::Результат, которое указывает состояние распознавания для данного жеста и целевого объекта. Это определяет, будет ли событие жеста доставлено целевому объекту.
Если вы выберете представление жеста с помощью пользовательского подкласса QGesture, вам нужно будет переопределить функцию create() для создания экземпляров вашего класса жеста. Аналогично, вам может потребоваться переопределить функцию reset(), если пользовательские объекты жестов должны обрабатываться особым образом, когда жест отменяется.
См. также QGesture.
Документация по типам членов
перечисление QGestureRecognizer::ФлагРезультата QGestureRecognizer::Результат
Это перечисление описывает результат текущего шага фильтрации событий в состоянии машины распознавания жестов.
Результат состоит из значения состояния (одно из Игнорировать, ВозможноЖест, СрабатываетЖест, ЗавершитьЖест, ОтменитьЖест) и необязательного подсказки (ПотреблятьСобытие).
| Константа | Значение | Описание |
|---|---|---|
QGestureRecognizer::Ignore |
0x0001 |
Событие не изменяет состояние распознавателя. |
QGestureRecognizer::MayBeGesture |
0x0002 |
Событие изменило внутреннее состояние распознавателя, но пока неясно, является ли это жестом. Распознавателю необходимо отфильтровать больше событий, чтобы принять решение. Распознаватели жестов в состоянии ВозможноЖест могут быть автоматически сброшены, если им потребуется слишком много времени для распознавания жестов. |
QGestureRecognizer::TriggerGesture |
0x0004 |
Жест был инициирован, и соответствующий объект QGesture будет передан целевому объекту как часть события QGestureEvent. |
QGestureRecognizer::FinishGesture |
0x0008 |
Жест был успешно завершен, и соответствующий объект QGesture будет передан целевому объекту как часть события QGestureEvent. |
QGestureRecognizer::CancelGesture |
0x0010 |
Событие показало, что это не жест. Если распознаватель жестов был в состоянии СрабатываетЖест до этого, то жест отменяется, и соответствующий объект QGesture будет передан целевому объекту как часть события QGestureEvent. |
QGestureRecognizer::ConsumeEventHint |
0x0100 |
Эта подсказка указывает, что фреймворк обработки жестов должен потреблять отфильтрованное событие и не отправлять его получателю. |
Тип Результат является typedef для QFlags<ФлагРезультата>. Он хранит логическое ИЛИ комбинацию значений ФлагРезультата.
См. также QGestureRecognizer::recognize().
Документация по функциям членов
QGestureRecognizer::QGestureRecognizer()
Конструирует новый объект распознавателя жестов.
[virtual] QGestureRecognizer::~QGestureRecognizer()
Уничтожает распознаватель жестов.
[virtual] QGesture *QGestureRecognizer::create(QObject *target)
Эта функция вызывается Qt для создания нового объекта QGesture для данного target (QWidget или QGraphicsObject).
Переопределите эту функцию для создания пользовательского объекта жеста, производного от QGesture, если это необходимо.
Приложение берет на себя управление созданным объектом жеста.
[pure virtual] QGestureRecognizer::Результат QGestureRecognizer::recognize(QGesture *gesture, QObject *watched, QEvent *event)
Обрабатывает данное event для объекта watched, обновляя состояние объекта gesture по мере необходимости и возвращает подходящий результат для текущего шага распознавания.
Эта функция вызывается фреймворком, чтобы позволить распознавателю отфильтровывать события ввода, отправленные в объекты QWidget или QGraphicsObject, которые он отслеживает.
Результат отражает, насколько жест был распознан. Состояние объекта gesture устанавливается в зависимости от результата.
См. также QGestureRecognizer::Результат.
[static] Qt::GestureType QGestureRecognizer::registerRecognizer(QGestureRecognizer *recognizer)
Регистрирует заданный recognizer в системе управления жестами и возвращает для него идентификатор жеста.
Приложению передается владение recognizer, и возвращается идентификатор типа жеста, связанный с ним. Для распознавателей жестов, обрабатывающих пользовательские объекты QGesture (то есть тех, которые возвращают Qt::CustomGesture в функции QGesture::gestureType()), возвращаемое значение является сгенерированным идентификатором жеста с установленным флагом Qt::CustomGesture.
См. также unregisterRecognizer(), QGestureRecognizer::create() и QGesture.
[virtual] void QGestureRecognizer::reset(QGesture *gesture)
Эта функция вызывается системой для сброса заданного gesture.
Переопределите эту функцию, чтобы реализовать дополнительные требования для пользовательских объектов QGesture. Это может потребоваться, если вы реализуете пользовательский объект QGesture, свойства которого требуют специальной обработки при сбросе жеста.
[static] void QGestureRecognizer::unregisterRecognizer(Qt::GestureType type)
Деактивирует все распознаватели жестов указанного type.
См. также registerRecognizer().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qgesturerecognizer.html