QTouchEvent 类包含触摸事件的描述参数。 更多...
头: | #include <QTouchEvent> |
CMake: |
find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake: | QT += gui |
继承: | QPointerEvent |
QObject * | target () const |
QEventPoint::States | touchPointStates () const |
virtual bool | isBeginEvent () const override |
virtual bool | isEndEvent () const override |
virtual bool | isUpdateEvent () const override |
触摸事件发生,当在触摸设备 (譬如:触摸屏或跟踪板) 中按下、释放或移动一个或多个触摸点时。要接收触摸事件,Widget 必须拥有 Qt::WA_AcceptTouchEvents 属性设置和图形项需要拥有 acceptTouchEvents 属性设置为 true。
当使用 QAbstractScrollArea 基 Widget,应启用 Qt::WA_AcceptTouchEvents 属性在卷动区域 viewport .
类似于 QMouseEvent ,Qt 自动抓取每个触摸点当在 Widget 内第一次按下时,且小部件将接收触摸点的所有更新,直到它被释放。注意,Widget 能接收很多触摸点事件,且多个小部件可能同时接收触摸事件。
所有触摸事件类型,包括 QEvent::TouchBegin , QEvent::TouchUpdate , QEvent::TouchEnd or QEvent::TouchCancel 。重实现 QWidget::event () 或 QAbstractScrollArea::viewportEvent () 对于 Widget 和 QGraphicsItem::sceneEvent () 对于要接收触摸事件的图形视图项。
不像 Widget,QWindows 始终接收触摸事件,无需选项。当直接工作于 QWindow ,是足够的重实现 QWindow::touchEvent ().
The QEvent::TouchUpdate and QEvent::TouchEnd 事件会被发送给 Widget 或项接受 QEvent::TouchBegin 事件。若 QEvent::TouchBegin 事件未接受且未被事件过滤器所过滤,则进一步触摸事件不会被发送直到下一 QEvent::TouchBegin .
某些系统可能发送事件类型 QEvent::TouchCancel 。当收到此事件时,应用程序被请求忽略整个活动触摸序列。例如,在合成系统中,合成器可以决定将某些手势视为系统范围手势。每当做出这种决定 (识别手势) 时,会通知客户端采用 QEvent::TouchCancel 事件,因此它们可以相应更新其状态。
The pointCount () 和 point () 函数可以用于访问和迭代各个接触点。
The points () 函数返回事件中包含的所有触摸点的列表。注意,此列表可能为空,例如,若为 QEvent::TouchCancel event. Each point is an instance of the QEventPoint 类。 QEventPoint::State 枚举描述触摸点可能拥有的不同状态。
注意: 列表 points () will never be partial: A touch event will always contain a touch point for each existing physical touch contacts targeting the window or widget to which the event is sent. For instance, assuming that all touches target the same window or widget, an event with a condition of points ().count()==2 保证,暗示触摸触摸屏 (或触摸板) 的准确手指数为 2。
默认情况下, QGuiApplication 翻译第一触摸点在 QTouchEvent 成 QMouseEvent . This makes it possible to enable touch events on existing widgets that do not normally handle QTouchEvent. See below for information on some special considerations needed when doing this.
QEvent::TouchBegin 是发送给 Widget 的第一触摸事件。 QEvent::TouchBegin 事件包含指示接收者是否想要事件的特殊接受标志。默认情况下,接受事件。应该调用 ignore () 若 Widget 不处理触摸事件。 QEvent::TouchBegin 事件会沿父级 Widget 链向上传播,直到小部件接受它采用 accept (),或事件过滤器消耗掉它。对于 QGraphicsItems, QEvent::TouchBegin 事件被传播给鼠标下项 (类似于 QGraphicsItems 的鼠标事件传播)。
如上所述,它是可能的几个 Widget 可以同时接收 QTouchEvents。不管怎样,Qt 确保从不重复发送 QEvent::TouchBegin 事件给同一 Widget,理论上传播期间可能发生,例如,若用户触摸 2 单独 Widget 在 QGroupBox 与两 Widget 忽略 QEvent::TouchBegin 事件。
为避免这,Qt 使用下列规则将新触摸点分组到一起:
这使同级 Widget 能够独立处理触摸事件,同时确保 QTouchEvents 序列始终正确成为可能。
QTouchEvent 的交付独立于 QMouseEvent 。应用程序标志 Qt::AA_SynthesizeTouchForUnhandledMouseEvents and Qt::AA_SynthesizeMouseForUnhandledTouchEvents 可以用于启用 (或禁用) 将触摸事件自动合成为鼠标事件,和将鼠标事件自动合成为触摸事件。
另请参阅 QEventPoint , QEventPoint::State , Qt::WA_AcceptTouchEvents ,和 QGraphicsItem::acceptTouchEvents ().
[override virtual]
bool
QTouchEvent::
isBeginEvent
() const
Returns true if this event includes at least one newly-pressed touchpoint.
[override virtual]
bool
QTouchEvent::
isEndEvent
() const
返回 true 若此事件包括至少一个新近发布的触摸点。
[override virtual]
bool
QTouchEvent::
isUpdateEvent
() const
Returns true if this event does not include newly-pressed or newly-released touchpoints.
返回出现事件的窗口内的目标对象。这通常是 QWidget 或 QQuickItem 。可能为 0 当没有可用特定目标时。
返回此事件所有触摸点状态的按位 OR。