QGestureRecognizer 类

QGestureRecognizer 类提供了手势识别的基础结构。 更多...

头文件 #include <QGestureRecognizer>
CMakefind_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmakeQT += widgets

公共类型

flags结果
枚举ResultFlag { Ignore, MayBeGesture, TriggerGesture, FinishGesture, CancelGesture, ConsumeEventHint }

公共函数

QGestureRecognizer()
virtual~QGestureRecognizer()
virtual QGesture *create(QObject *target)
virtual QGestureRecognizer::Resultrecognize(QGesture *gesture, QObject *watched, QEvent *event) = 0
virtual voidreset(QGesture *gesture)

静态公共成员

Qt::GestureTyperegisterRecognizer(QGestureRecognizer *recognizer)
voidunregisterRecognizer(Qt::GestureType type)

详细描述

手势识别器负责创建和管理 QGesture 对象,并监控发送到 QWidgetQGraphicsObject 子类的输入事件。QGestureRecognizer 是实现自定义手势的基类。

只需要为标准手势提供识别功能的开发者不需要直接使用此类。实例将通过框架在幕后创建。

有关 Qt 中手势处理概述和使用手势的详细信息,请参阅 Widgets 和 Graphics View 中的手势 文档。

识别手势

识别手势的过程涉及过滤发送到特定对象的输入事件,并修改相关的 QGesture 对象以包含有关用户输入的相关信息。

当框架调用 create() 处理特定实例的 QWidgetQGraphicsObject 子类的用户输入时创建手势。每个配置为使用手势的小部件或项目都会创建一个 QGesture 对象。

一旦为对象创建了一个QGesture,手势识别器就会在其recognize() 处理函数中接收该手势的事件。

当手势取消时,会调用reset() 函数,使得识别器有机会更新对应的QGesture 对象中的适当属性。

支持新手势

要添加对新手势的支持,需要从 QGestureRecognizer 派生以创建自定义识别器类,构造此类的实例,并通过调用 QGestureRecognizer::registerRecognizer() 在应用中注册它。您还可以通过创建自定义手势类来继承 QGesture,或利用动态属性来表达您想处理的手势的特定细节。

您的自定义 QGestureRecognizer 子类需要重写recognize() 函数来处理和过滤针对 QWidgetQGraphicsObject 子类传入的输入事件。尽管手势识别逻辑实现在此函数中,但您可以在提供的QGesture 对象中存储识别过程状态的持久信息。该recognize() 函数必须返回一个值为QGestureRecognizer::Result 的值,该值指示给定手势和目标对象的识别状态。这决定了是否将手势事件传递给目标对象。

如果您选择通过自定义 QGesture 子类来表示手势,则需要重写 create() 函数来构建手势类的实例。类似地,如果您的自定义手势对象需要在手势被取消时进行特殊处理,则可能需要重写 reset() 函数。

另请参阅QGesture

成员类型文档

枚举 QGestureRecognizer::ResultFlag
标志 QGestureRecognizer::Result

此枚举描述了手势识别器状态机中当前事件过滤步骤的结果。

结果由状态值(Ignore、MayBeGesture、TriggerGesture、FinishGesture、CancelGesture 之一)和可选提示(ConsumeEventHint)组成。

常量描述
QGestureRecognizer::Ignore0x0001该事件不会改变识别器的状态。
QGestureRecognizer::MayBeGesture0x0002事件改变了识别器的内部状态,但还不清楚它是否是手势。识别器需要过滤更多事件来决定。处于 MayBeGesture 状态的手势识别器,如果识别手势花费时间过长,可能会被自动重置。
QGestureRecognizer::TriggerGesture0x0004手势已被触发,适当的 QGesture 对象将作为QGestureEvent 的一部分传送到目标。
QGestureRecognizer::FinishGesture0x0008手势成功完成,适当的 QGesture 对象将作为 QGestureEvent 的一部分传送到目标。
QGestureRecognizer::CancelGesture0x0010事件清楚地表明,它不是一个手势。如果手势识别器在之前的 GestureTriggered 状态之前,则手势被取消,适当的 QGesture 对象将作为 QGestureEvent 的一部分传送到目标。
QGestureRecognizer::ConsumeEventHint0x0100此提示指定手势框架应该消耗过滤事件的筛选事件,并将其不传递给接收者。

结果类型是对 QFlags<ResultFlag> 的类型定义。它存储了 ResultFlag 值的或组合。

另请参阅QGestureRecognizer::recognize()。

成员函数文档

QGestureRecognizer::QGestureRecognizer()

构建一个新的手势识别器对象。

[虚函数 noexcept] QGestureRecognizer::~QGestureRecognizer()

销毁手势识别器。

[虚函数] QGesture *QGestureRecognizer::create(QObject *target)

此函数由 Qt 调用,为给定的 targetQWidgetQGraphicsObject)创建一个新的 QGesture 对象。

如果需要,实现此函数以创建自定义的派生自 QGesture 的手势对象。

应用程序将拥有创建的手势对象。

[纯虚函数] QGestureRecognizer::Result QGestureRecognizer::recognize(QGesture *gesture, QObject *watched, QEvent *event)

处理给定的 event 对象,更新 gesture 对象的状态,并返回当前识别步骤的合适结果。

此函数由框架调用,以允许识别器过滤传递给其监控的 QWidgetQGraphicsObject 实例的输入事件。

结果反映了识别的手势程度。根据结果设置 gesture 对象的状态。

另请参阅QGestureRecognizer::Result

[静态] Qt::GestureType QGestureRecognizer::registerRecognizer(QGestureRecognizer *recognizer)

将给定的 recognizer 在手势框架中注册,并返回相应的手势 ID。

应用程序接受 recognizer 的所有权并返回与之相关联的手势类型 ID。对于处理自定义 QGesture 对象的手势识别器(即,那些在 QGesture::gestureType() 函数中返回 Qt::CustomGesture 的识别器),返回值是随生成的手势 ID,其中设置了 Qt::CustomGesture 标志。

另请参阅unregisterRecognizerQGestureRecognizer::create,和 QGesture

[虚函数] void QGestureRecognizer::reset(QGesture *gesture)

框架调用此函数以重置给定的 gesture

实现此函数以实现自定义 QGesture 对象的额外要求。如果您实现了一个需要特殊处理重置时的属性的自定义 QGesture,则可能需要这么做。

[静态] void QGestureRecognizer::unregisterRecognizer(Qt::GestureType type)

注销指定类型的所有动作识别器。

另请参阅 registerRecognizer

© 2024 Qt 公司。此处包含的文档贡献版权属于各自的所有者。此处提供的文档在自由软件基金的《GNU自由文档许可证》第1.3版下分发,该许可证可在<复仇软>网站找到。Qt及其相关标志为芬兰的Qt公司及其它国家/地区的商标。所有其他商标均属于其各自的所有者。