QTouchEvent —— 译自Qt5.3官方文档
(location:图书馆三楼电子阅览室,话说有年头没来这了。。。)
源:http://qt-project.org/doc/qt-5/qtouchevent.html
内容
QTouchEvent 类
QTouchEvent 类包含描述触摸事件的参数。更多......
头文件: | #include < QTouchEvent > |
qmake: | QT + = gui |
自从: | 4.6 qt |
继承: | QInputEvent. |
公共类型
类 | TouchPoint |
公有函数
QTouchEvent(QEvent::Type eventType, QTouchDevice * device = 0, Qt::KeyboardModifiers modifiers = Qt::NoModifier, Qt::TouchPointStatestouchPointStates = 0, const QList<QTouchEvent::TouchPoint> & touchPoints = QList<QTouchEvent::TouchPoint> ()) | |
~ QTouchEvent() | |
QTouchDevice * | device(const) |
QObject * | target(const) |
Qt::TouchPointStates | touchPointStates(const) |
const QList < QTouchEvent::TouchPoint > & | touchPoints(const) |
QWindow * | window(const) |
- 2 从QInputEvent那里继承的公共职能
- 6 的公共职能,从QEvent继承
额外的继承的成员
详细的说明
QTouchEvent 类包含描述触摸事件的参数。
启用触摸事件
当按下,释放,或在触摸设备 (如触摸屏或触控板) 上移动一个或多个接触点时,触控事件发生。若要接收触摸事件,控件必须已设置了Qt::WA_AcceptTouchEvents属性和图形项目需要把acceptTouchEvents属性设置为 true。
当使用QAbstractScrollArea基于窗口小部件时,您应该启用滚动区域视区的Qt::WA_AcceptTouchEvents属性.
同样到QMouseEvent,qt 离散度自动抓取里面一个小部件,第一次按每个接触点和小部件将接收所有更新的触摸点,直到它被释放。请注意有可能为一个小部件来接收大量的接触点、 事件和多个小部件可能在同一时间收到触摸事件。
事件处理
所有触摸事件包括QEvent::TouchBegin、QEvent::TouchUpdate、QEvent::TouchEnd或QEvent::TouchCancel。为控件重新实现QWidget::event() 或 QAbstractScrollArea::viewportEvent and 为图形视图中的items实现QGraphicsItem::sceneEvent() 来接收触摸事件。
不同于widgets控件,QWindows总是接受触摸事件,并且不需要选择。 直接使用QWindow时,它就足以重新实现QWindow::touchEvent().
QEvent::TouchUpdate 和 QEvent::TouchEnd 事件被发送给接收QEvent::TouchBegin 事件的widget 或 item.如果QEvent::TouchBegin事件不被接受,并且无事件过滤器,就没有进一步的触摸事件发送,直到下一个QEvent::TouchBegin.
某些系统可能发送一个QEvent::TouchCancel类型的事件。一旦收到此事件的应用程序要求忽略整个活动触摸序列。例如在复合系统中排序可能会决定作为全系统的姿态对待某些手势。每当作出这样的决定 (一姿态被认可),客户端将通知QEvent::TouchCancel事件,以便他们可以相应地更新他们的状态。
touchPoints() 函数返回事件中所有接触点的列表。注意此列表可能是空的例如在QEvent::TouchCancel事件的情况下。可以使用QTouchEvent::TouchPoint类检索关于每个接触点的信息。Qt::TouchPointState枚举描述触摸点可能有不同的状态。
注:touchPoints() 的列表中将永远不会是部分的(译者注:不完整的): 触摸事件将始终为每个正存在肢体接触的并发送了相应的事件的窗口或部件包含一个触摸点。例如,假定所有的触摸目标在同一窗口或窗口部件,一个具有touchPoints().count()==2的事件保证意味着手指触摸触摸屏或触摸板数目正是两个。
事件传递和传播
默认情况下, QGuiApplication转换QTouchEvent 的第一个接触点到 QMouseEvent。这样一来,我们就可以使现有的部件通常不处理 QTouchEvent 上的触摸事件。有关详细信息,请参阅下面有关当这样做时,需要注意一些特殊事项的信息。
QEvent::TouchBegin是第一个发送到部件的触摸事件。QEvent::TouchBegin事件包含一个特殊的接受标志,指示接收方是否想要该事件。默认情况下,接受该事件。如果触摸事件不由您的部件处理,你应该叫调用ignore()。QEvent::TouchBegin事件被传播到父窗口的部件链中,直到一个小部件用accept()接受它,或事件过滤器处理它。对于QGraphicsItems,QEvent::TouchBegin事件在鼠标下被传递到items (类似于 QGraphicsItems 的鼠标事件传播) 。
触摸点分组
如上文所述,几个小部件在同一时间收到 QTouchEvents是可能的。然而,qt 确保永远不会有重复的QEvent::TouchBegin事件发送到同一控件,例如,用户触摸了在QGroupBox 中的2 个分隔部件(separate widgets),那么两个部件就会忽略QEvent::TouchBegin事件。
要避免此问题,Qt 将组建新的接触点一起使用下列规则:
- 当检测到第一接触点时,目的地部件首先由屏幕上的位置决定,第二再考虑传播规律。
- 当检测到更多的接触点时,Qt 首先查找,看看是否有基于任何祖先或新的触摸点下的控件的活动的接触点。如果有,新的触摸点分组第一,新的接触点将发送到处理第一接触点的小部件的单一 QTouchEvent。(新的触摸点下构件不会收到事件)。
这使得在同级窗口部件中处理触摸事件是可能的,同时又能确保 QTouchEvents 的序列是总是正确独立处理触摸事件。
鼠标事件和触摸事件合成
QTouchEvent 交付是独立于QMouseEvent。应用标记Qt::AA_SynthesizeTouchForUnhandledMouseEvents和Qt::AA_SynthesizeMouseForUnhandledTouchEvents可用于启用或禁用触摸事件到鼠标事件或鼠标事件到触摸事件的自动合成。
注意事项
- 如上文所述,启用触控事件意味着多个小部件可以同时接收触摸事件。这与缺省的QWidget::event() 处理的 QTouchEvents 结合,给你极大的灵活性,在设计触摸的用户界面。请注意所涉问题。例如,有可能用户是移动的QSlider用一根手指,并按QPushButton与另一个。这些小部件所发出的信号将会相互交错。
- 递归进入事件循环使用 exec () 方法之一 (例如,QDialog::exec() 或QMenu::exec()) QTouchEvent 事件处理程序中不受支持。由于有多个事件收件人,递归可能会导致问题,包括但不是限于丢失的事件和意外的无限递归。
- QTouchEvents 不受鼠标抓取或主动弹出窗口小部件。QTouchEvents 的行为是未定义的当打开一个弹出窗口或抓取鼠标移动而又有多个活跃的接触点。
See also QTouchEvent::TouchPoint, Qt::TouchPointState, Qt::WA_AcceptTouchEvents, and QGraphicsItem::acceptTouchEvents" _msthash="961220" _mstchunk="true">请参见QTouchEvent::TouchPoint、Qt::TouchPointState、Qt::WA_AcceptTouchEvents、QGraphicsItem::acceptTouchEvents().
成员函数文档
QTouchEvent::QTouchEvent(QEvent::Type eventType, QTouchDevice * device = 0, Qt::KeyboardModifiers modifiers = Qt::NoModifier, Qt::TouchPointStatestouchPointStates = 0, const QList<QTouchEvent::TouchPoint> & touchPoints = QList<QTouchEvent::TouchPoint> ())
用给定的evenType,device,touchPoints构造一个QTouchEvent,touchPointStates和modifiers是当前触摸点的状态,KeyboardModifiers是在时间发生时
QTouchEvent::~QTouchEvent()
返回此触摸事件所源自的触摸设备。
QObject * QTouchEvent::target() const
返回发生事件窗口内的目标对象。这通常是QWidget或QQuickItem。没有特定的目标不可用时,可能为 0。
Qt::TouchPointStates QTouchEvent::touchPointStates() const
返回逐位或运算这一事件的所有触摸点状态。
const QList<QTouchEvent::TouchPoint> & QTouchEvent::touchPoints() const
返回触摸事件中所包含的接触点的列表。
QWindow * QTouchEvent::window() const
返回发生此事件的窗口。对于做整体-局部映射的数据,如 rawScreenPositions(),出于性能原因,只是存储在触摸事件中的全局位置。