QGestureRecognizer 类

The QGestureRecognizer 类提供用于手势识别的基础设施。 更多...

头: #include <QGestureRecognizer>
qmake: QT += widgets
Since: Qt 4.6

公共类型

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

公共函数

QGestureRecognizer ()
virtual ~QGestureRecognizer ()
virtual QGesture * create (QObject * target )
virtual Result recognize (QGesture * gesture , QObject * watched , QEvent * event ) = 0
virtual void reset (QGesture * gesture )

静态公共成员

Qt::GestureType registerRecognizer (QGestureRecognizer * recognizer )
void unregisterRecognizer (Qt::GestureType type )

详细描述

The QGestureRecognizer 类提供用于手势识别的基础设施。

手势识别器负责创建和管理 QGesture 对象和监视的输入事件会被发送给 QWidget and QGraphicsObject 子类。 QGestureRecognizer 是实现自定义手势的基类。

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

Qt 中手势处理的概述和在应用程序中使用手势的有关信息,见 Widget 和图形视图中的手势 文档。

识别手势

识别手势的过程涉及过滤发送给特定对象的输入事件,和修改关联 QGesture 对象以包括关于用户输入的相关信息。

创建手势当框架调用 create () 处理用户输入为特定实例化的 QWidget or QGraphicsObject 子类。 QGesture 对象的创建是为将每个 Widget 或项配置成使用手势。

一旦 QGesture 已创建为目标对象,手势识别器将接收事件在其 recognize () 处理程序函数。

当取消手势时, reset () 函数被调用,给出识别器改变以更新适当特性在相应 QGesture 对象。

支持新的手势

要添加支持新手势,需要派生 QGestureRecognizer 以创建自定义识别器类 (构造此类的实例),并将它注册到应用程序通过调用 QGestureRecognizer::registerRecognizer ()。还可以子类化 QGesture 以创建自定义手势类,或依赖动态特性来表达想要处理手势的特定细节。

自定义 QGestureRecognizer 子类需要重实现 recognize () 函数以处理和过滤传入输入事件为 QWidget and QGraphicsObject 子类。尽管手势识别逻辑是在此函数中实现的,可以将识别过程状态的有关持久信息存储在 QGesture 供给对象。 recognize () 函数必须返回值 QGestureRecognizer::Result 指示给定手势和目标对象的识别状态。这确定是否有将手势事件交付给目标对象。

若要选择表示手势通过自定义 QGesture 子类,将需要重实现 create () 函数以构造手势类实例。同样,可能需要重实现 reset () 函数若需要特殊处理自定义手势对象,当取消手势时。

另请参阅 QGesture .

成员类型文档编制

enum QGestureRecognizer:: ResultFlag
flags QGestureRecognizer:: 结果

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

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

常量 描述
QGestureRecognizer::Ignore 0x0001 事件不改变识别器的状态。
QGestureRecognizer::MayBeGesture 0x0002 事件改变识别器的内部状态,但尚未清零它 (不管是不是手势)。识别器需要过滤更多事件才决定。可以自动重置 MayBeGesture 状态下的手势识别器,若它们花太长时间识别手势。
QGestureRecognizer::TriggerGesture 0x0004 手势已触发且适当 QGesture 对象将被交付给目标作为部分属于 QGestureEvent .
QGestureRecognizer::FinishGesture 0x0008 手势已成功完成且适当 QGesture 对象将被交付给目标作为部分属于 QGestureEvent .
QGestureRecognizer::CancelGesture 0x0010 事件清楚它不是手势。若手势识别器之前处于 GestureTriggered 状态,则手势被取消且适当 QGesture 对象将被交付给目标作为部分属于 QGestureEvent .
QGestureRecognizer::ConsumeEventHint 0x0100 此提示指定手势框架应消费过滤事件,且不将它交付给接收者。

Result 类型是 typedef 对于 QFlags <ResultFlag>。它存储 ResultFlag 值的 OR 组合。

另请参阅 QGestureRecognizer::recognize ().

成员函数文档编制

QGestureRecognizer:: QGestureRecognizer ()

构造新的手势识别器对象。

[虚拟] QGestureRecognizer:: ~QGestureRecognizer ()

销毁手势识别器。

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

Qt 调用此函数以创建新的 QGesture 对象为给定 target ( QWidget or QGraphicsObject ).

重实现此函数以创建自定义 QGesture 派生手势对象,若有必要。

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

[pure virtual] 结果 QGestureRecognizer:: recognize ( QGesture * gesture , QObject * watched , QEvent * event )

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

框架调用此函数以允许识别器过滤输入事件,输入事件已分派给 QWidget or QGraphicsObject 正监视实例。

结果反映手势的识别程度。状态对于 gesture 对象其设置从属结果。

另请参阅 QGestureRecognizer::Result .

[static] Qt::GestureType QGestureRecognizer:: registerRecognizer ( QGestureRecognizer * recognizer )

注册给定 recognizer 在手势框架并为它返回手势 ID。

应用程序拥有所有权对于 recognizer 并返回关联它的手势类型 ID。采用手势识别器处理自定义 QGesture 对象 (即:那些会返回 Qt::CustomGesture QGesture::gestureType () 函数),返回值是生成的手势 ID 带有 Qt::CustomGesture 设置标志。

另请参阅 unregisterRecognizer (), QGestureRecognizer::create (),和 QGesture .

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

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

重实现此函数以实现额外要求对于自定义 QGesture 对象。这可能有必要若实现自定义 QGesture 其特性需要特殊处理,当重置手势时。

[static] void QGestureRecognizer:: unregisterRecognizer ( Qt::GestureType type )

取消注册所有手势识别器为指定 type .

另请参阅 registerRecognizer ().