QTouchEvent Class

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

상세 설명

터치 이벤트 활성화

터치 이벤트는 터치 장치(예: 터치 스크린 또는 트랙 패드)에서 하나 이상의 터치 포인트를 누르거나, 놓거나, 움직일 때 발생합니다. 터치 이벤트를 수신하려면 위젯에 Qt::WA_AcceptTouchEvents 속성이 설정되어 있어야 하고 그래픽 항목에 acceptTouchEvents 속성이 true로 설정되어 있어야 합니다.

QAbstractScrollArea 기반 위젯을 사용하는 경우, 스크롤 영역의 viewport 에서 Qt::WA_AcceptTouchEvents 어트리뷰트를 활성화해야 합니다.

QMouseEvent 와 유사하게 Qt는 위젯 내부에서 처음 누를 때 각 터치 포인트를 자동으로 가져오고, 위젯은 해제될 때까지 해당 터치 포인트에 대한 모든 업데이트를 받습니다. 하나의 위젯이 여러 터치 포인트에 대한 이벤트를 수신할 수 있으며, 여러 위젯이 동시에 터치 이벤트를 수신할 수도 있다는 점에 유의하세요.

이벤트 처리

모든 터치 이벤트는 QEvent::TouchBegin, QEvent::TouchUpdate, QEvent::TouchEnd 또는 QEvent::TouchCancel 유형입니다. 터치 이벤트를 수신하려면 위젯의 경우 QWidget::event() 또는 QAbstractScrollArea::viewportEvent(), 그래픽 보기의 항목의 경우 QGraphicsItem::sceneEvent()를 다시 구현하세요.

위젯과 달리 QWindows는 항상 터치 이벤트를 수신하므로 옵트인할 필요가 없습니다. QWindow 로 직접 작업하는 경우 QWindow::touchEvent()를 다시 구현하면 충분합니다.

QEvent::TouchUpdateQEvent::TouchEnd 이벤트는 QEvent::TouchBegin 이벤트를 수락한 위젯 또는 항목으로 전송됩니다. QEvent::TouchBegin 이벤트가 수락되지 않고 이벤트 필터에 의해 필터링되지 않으면 다음 QEvent::TouchBegin 이벤트가 전송될 때까지 더 이상의 터치 이벤트가 전송되지 않습니다.

일부 시스템은 QEvent::TouchCancel 유형의 이벤트를 전송할 수 있습니다. 이 이벤트를 수신하면 애플리케이션은 전체 활성 터치 시퀀스를 무시하도록 요청받습니다. 예를 들어 합성 시스템에서 컴포지터는 특정 제스처를 시스템 전체의 제스처로 처리하기로 결정할 수 있습니다. 이러한 결정이 내려질 때마다(제스처가 인식될 때마다) 클라이언트는 QEvent::TouchCancel 이벤트로 알림을 받아 그에 따라 상태를 업데이트할 수 있습니다.

pointCount() 및 point() 함수는 개별 터치 포인트에 액세스하고 반복하는 데 사용할 수 있습니다.

points() 함수는 이벤트에 포함된 모든 터치 포인트의 목록을 반환합니다. 예를 들어 QEvent::TouchCancel 이벤트의 경우 이 목록은 비어 있을 수 있습니다. 각 포인트는 QEventPoint 클래스의 인스턴스입니다. QEventPoint::State 열거형은 터치 포인트가 가질 수 있는 다양한 상태를 설명합니다.

참고: points()의 목록은 절대로 부분적이지 않습니다: 터치 이벤트에는 항상 이벤트가 전송되는 창 또는 위젯을 대상으로 하는 기존의 각 물리적 터치 접점에 대한 터치 포인트가 포함됩니다. 예를 들어 모든 터치가 동일한 창이나 위젯을 대상으로 한다고 가정하면 points().count()==2 조건의 이벤트는 터치스크린이나 터치패드에 닿은 손가락의 수가 정확히 두 개라는 것을 의미합니다.

이벤트 전달 및 전파

기본적으로 QGuiApplication 은 QTouchEvent의 첫 번째 터치 포인트를 QMouseEvent 으로 변환합니다. 따라서 일반적으로 QTouchEvent를 처리하지 않는 기존 위젯에서 터치 이벤트를 활성화할 수 있습니다. 이 작업을 수행할 때 필요한 몇 가지 특별한 고려 사항에 대한 정보는 아래를 참조하세요.

QEvent::TouchBegin 는 위젯에 전송되는 첫 번째 터치 이벤트입니다. QEvent::TouchBegin 이벤트에는 수신자가 이벤트를 원하는지 여부를 나타내는 특수 수락 플래그가 포함되어 있습니다. 기본적으로 이벤트는 수락됩니다. 위젯에서 터치 이벤트를 처리하지 않는 경우 ignore()를 호출해야 합니다. QEvent::TouchBegin 이벤트는 위젯이 accept()로 수락하거나 이벤트 필터가 이벤트를 소비할 때까지 상위 위젯 체인으로 전파됩니다. QGraphicsItems의 경우 QEvent::TouchBegin 이벤트는 마우스 아래의 항목으로 전파됩니다(QGraphicsItems의 마우스 이벤트 전파 방식과 유사).

터치 포인트 그룹화

위에서 언급했듯이, 여러 위젯이 동시에 QTouchEvents를 수신할 수 있습니다. 그러나 Qt는 동일한 위젯에 중복된 QEvent::TouchBegin 이벤트를 보내지 않도록 하는데, 예를 들어 사용자가 QGroupBox 에서 2개의 개별 위젯을 터치했는데 두 위젯이 모두 QEvent::TouchBegin 이벤트를 무시하는 경우 이론적으로 전파 중에 발생할 수 있습니다.

이를 방지하기 위해 Qt는 다음 규칙을 사용하여 새 터치 포인트를 함께 그룹화합니다:

  • 첫 번째 터치 포인트가 감지되면 먼저 화면의 위치에 따라 대상 위젯이 결정되고 두 번째로 전파 규칙에 따라 대상 위젯이 결정됩니다.
  • 추가 터치 포인트가 감지되면 Qt는 먼저 새 터치 포인트 아래 위젯의 조상 또는 자손에 활성 터치 포인트가 있는지 확인합니다. 있는 경우 새 터치 포인트는 첫 번째 터치 포인트와 그룹화되고 새 터치 포인트는 첫 번째 터치 포인트를 처리한 위젯에 단일 QTouchEvent로 전송됩니다. (새 터치 포인트 아래의 위젯은 이벤트를 수신하지 않습니다).

이렇게 하면 형제 위젯이 터치 이벤트를 독립적으로 처리하는 동시에 QTouchEvent의 순서가 항상 올바른지 확인할 수 있습니다.

마우스 이벤트와 터치 이벤트 합성

QMouseEvent응용 프로그램 플래그 Qt::AA_SynthesizeTouchForUnhandledMouseEventsQt::AA_SynthesizeMouseForUnhandledTouchEvents 를 사용하여 터치 이벤트를 마우스 이벤트로, 마우스 이벤트를 터치 이벤트로 자동 합성하는 것을 활성화 또는 비활성화할 수 있습니다.

주의 사항

  • 위에서 언급했듯이 터치 이벤트를 활성화하면 여러 위젯이 동시에 터치 이벤트를 수신할 수 있습니다. QTouchEvents에 대한 기본 QWidget::event() 처리와 결합하면 터치 사용자 인터페이스를 매우 유연하게 디자인할 수 있습니다. 의미에 유의하세요. 예를 들어 사용자가 한 손가락으로 QSlider 을 이동하고 다른 손가락으로 QPushButton 을 누르고 있을 수 있습니다. 이러한 위젯에서 방출되는 신호는 인터리빙됩니다.
  • QTouchEvent 이벤트 핸들러에서 exec() 메서드 중 하나(예: QDialog::exec() 또는 QMenu::exec())를 사용하여 이벤트 루프로 재귀하는 것은 지원되지 않습니다. 이벤트 수신자가 여러 명이기 때문에 재귀는 이벤트 손실 및 예기치 않은 무한 재귀를 포함하되 이에 국한되지 않는 문제를 일으킬 수 있습니다.
  • mouse grab 또는 active pop-up widget. 활성 터치 포인트가 두 개 이상 있는 동안 팝업을 열거나 마우스를 잡을 때 QTouchEvents의 동작이 정의되지 않습니다.

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 = {})

주어진 eventType, device, touchPoints, 그리고 이벤트 시점의 현재 키보드 modifiers 로 QTouchEvent를 구성합니다.

[override virtual] bool QTouchEvent::isBeginEvent() const

이벤트에 새로 누른 터치포인트가 하나 이상 포함되어 있으면 true를 반환합니다.

[override virtual] bool QTouchEvent::isEndEvent() const

이벤트에 새로 릴리스된 터치포인트가 하나 이상 포함된 경우 true를 반환합니다.

[override virtual] bool QTouchEvent::isUpdateEvent() const

이벤트에 새로 누르거나 새로 릴리스한 터치포인트가 포함되지 않은 경우 true를 반환합니다.

QObject *QTouchEvent::target() const

이벤트가 발생한 창 내의 대상 개체를 반환합니다. 일반적으로 QWidget 또는 QQuickItem 입니다. 특정 대상을 사용할 수 없는 경우 0일 수 있습니다.

QEventPoint::States QTouchEvent::touchPointStates() const

이 이벤트에 대한 모든 터치 포인트 상태의 비트 단위 OR을 반환합니다.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.