QTouchEvent 類

The QTouchEvent 類包含觸摸事件的描述參數。 更多...

頭: #include <QTouchEvent>
qmake: QT += gui
Since: Qt 4.6
繼承: QInputEvent

公共類型

class TouchPoint

公共函數

QTouchEvent (QEvent::Type eventType , QTouchDevice * device = Q_NULLPTR, Qt::KeyboardModifiers modifiers = Qt::NoModifier, Qt::TouchPointStates touchPointStates = Qt::TouchPointStates(), 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

額外繼承成員

詳細描述

The QTouchEvent 類包含觸摸事件的描述參數。

啓用觸摸事件

觸摸事件發生,當在觸摸設備 (譬如:觸摸屏或跟蹤闆) 中按下、釋放或移動一個或多個觸摸點時。要接收觸摸事件,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 touchPoints () 函數返迴事件中包含的所有觸摸點的列錶。注意,此列錶可能為空,例如,若為 QEvent::TouchCancel 事件。可以檢索每個觸摸點的有關信息使用 QTouchEvent::TouchPoint 類。 Qt::TouchPointState 枚舉描述觸摸點可能擁有的不同狀態。

注意: 列錶 touchPoints () 從不會是一部分:觸摸事件將始終包含目標窗口 (或 Widget) 到發送事件的每一現有物理觸摸聯絡的觸摸點。例如,假定所有觸摸都目標同一窗口 (或 Widget),則事件具有條件 touchPoints ().count()==2 保證,暗示觸摸觸摸屏 (或觸摸闆) 的準確手指數為 2。

事件的交付和傳播

默認情況下, QGuiApplication 翻譯第一觸摸點在 QTouchEvent QMouseEvent 。這使啓用觸摸事件成為可能,當現有 Widget 通常不處理 QTouchEvent 。見下文,瞭解某些需要特殊注意事項的有關信息,當這樣做時。

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 首先由屏幕位置確定,其次由傳播規則確定。
  • 當檢測到其它觸摸點時,Qt 首先查看新觸摸點下 Widget 的任何祖先 (或後代) 中是否有任何活動觸摸點。若有,分組新觸摸點與第一觸摸點,並發送新觸摸點按單 QTouchEvent 到處理第一觸摸點的 Widget (新觸摸點下的小部件不接收事件)。

這使同級 Widget 能夠獨立處理觸摸事件,同時確保 QTouchEvents 序列始終正確成為可能。

鼠標事件和觸摸事件閤成

QTouchEvent 的交付獨立於 QMouseEvent 。應用程序標誌 Qt::AA_SynthesizeTouchForUnhandledMouseEvents and Qt::AA_SynthesizeMouseForUnhandledTouchEvents 可以用於啓用 (或禁用) 將觸摸事件自動閤成為鼠標事件,和將鼠標事件自動閤成為觸摸事件。

告誡

  • 如上所述,啓用觸摸事件意味著多個 Widget 可以同時接收觸摸事件。組閤默認 QWidget::event () 處理 QTouchEvents,這為設計觸摸用戶界麵賦予瞭很大靈活性。要意識到其中所隱含的。例如,用戶可能正移動 QSlider 用一根手指並按下 QPushButton 用另一根手指。由這些 Widget 發射的信號將交錯。
  • 遞歸到事件循環使用某一 exec() 方法 (如 QDialog::exec () 或 QMenu::exec ()) 在 QTouchEvent 事件處理程序不支持。由於存在多個事件收件人,遞歸可能導緻問題,包括但不限於丟失事件和意外無限遞歸。
  • QTouchEvents 不受影響被 鼠標抓取 活動彈齣 Widget 。QTouchEvents 的行為未定義,當打開彈齣窗口 (或抓取鼠標) 且存在多個活動觸摸點時。

另請參閱 QTouchEvent::TouchPoint , Qt::TouchPointState , Qt::WA_AcceptTouchEvents ,和 QGraphicsItem::acceptTouchEvents ().

成員函數文檔編製

QTouchEvent:: QTouchEvent ( QEvent::Type eventType , QTouchDevice * device = Q_NULLPTR, Qt::KeyboardModifiers modifiers = Qt::NoModifier, Qt::TouchPointStates touchPointStates = Qt::TouchPointStates(), const QList < QTouchEvent::TouchPoint > & touchPoints = QList<QTouchEvent::TouchPoint> ())

構造 QTouchEvent 采用給定 eventType , device ,和 touchPoints touchPointStates and modifiers 是事件發生時當前觸摸點狀態和鍵盤修飾符。

QTouchEvent:: ~QTouchEvent ()

銷毀 QTouchEvent .

QTouchDevice *QTouchEvent:: device () const

返迴此觸摸事件發源的觸摸設備。

QObject *QTouchEvent:: target () const

返迴齣現事件的窗口內的目標對象。這通常是 QWidget QQuickItem 。可能為 0 當沒有可用特定目標時。

Qt::TouchPointStates QTouchEvent:: touchPointStates () const

返迴此事件所有觸摸點狀態的按位 OR。

const QList < QTouchEvent::TouchPoint > &QTouchEvent:: touchPoints () const

返迴觸摸事件中包含的觸摸點列錶。

QWindow *QTouchEvent:: window () const

返迴齣現事件的窗口。當基於像 rawScreenPositions() 數據做全局-本地映射時會很有用,齣於性能原因,僅將全局位置存儲在觸摸事件中。