QTouchEvent 類包含觸摸事件的描述參數。 更多...
| 頭: |
#include <QTouchEvent>
|
| CMake: |
find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
|
| qmake: |
QT += gui
|
| 繼承: | QPointerEvent |
| QTouchEvent (QEvent::Type eventType , const QPointingDevice * device = nullptr, Qt::KeyboardModifiers modifiers = Qt::NoModifier, const QList<QEventPoint> & touchPoints = {}) | |
| 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 ().
[explicit]
QTouchEvent::
QTouchEvent
(
QEvent::Type
eventType
, const
QPointingDevice
*
device
= nullptr,
Qt::KeyboardModifiers
modifiers
= Qt::NoModifier, const
QList
<
QEventPoint
> &
touchPoints
= {})
構造 QTouchEvent 采用給定 eventType , device , touchPoints , and current keyboard modifiers at the time of the event.
[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。