QTouchEvent Class
QTouchEvent 클래스에는 터치 이벤트를 설명하는 매개변수들이 포함되어 있습니다. 더 보기...
| 헤더: | #include <QTouchEvent> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
| 상속: | QPointerEvent |
- 상속된 멤버를 포함한 모든 멤버 목록
- 사용 중단된 멤버
- QTouchEvent는 이벤트 클래스의 일부입니다.
공개 함수
| 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 |
보호된 함수
| QTouchEvent(QTouchEvent &&) | |
| QTouchEvent & | operator=(QTouchEvent &&) |
| QTouchEvent & | operator=(const QTouchEvent &other) |
상세 설명
터치 이벤트 활성화
터치 이벤트는 터치 장치(예: 터치스크린 또는 트랙패드)에서 하나 이상의 터치 지점을 누르거나, 손을 떼거나, 이동할 때 발생합니다. 터치 이벤트를 수신하려면 위젯에 ` 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::TouchUpdate 및 QEvent::TouchEnd 이벤트는 QEvent::TouchBegin 이벤트를 수락한 위젯이나 항목으로 전송됩니다. QEvent::TouchBegin 이벤트가 수락되지 않았거나 이벤트 필터에 의해 필터링되지 않은 경우, 다음 QEvent::TouchBegin 이 발생할 때까지 더 이상의 터치 이벤트는 전송되지 않습니다.
일부 시스템은 QEvent::TouchCancel 유형의 이벤트를 전송할 수 있습니다. 이 이벤트를 수신하면 애플리케이션은 활성 터치 시퀀스 전체를 무시해야 합니다. 예를 들어, 합성(compositing) 시스템에서 컴포지터는 특정 제스처를 시스템 전체에 적용되는 제스처로 처리하기로 결정할 수 있습니다. 이러한 결정이 내려질 때마다(제스처가 인식될 때마다), 클라이언트에게 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()`를 통해 이벤트를 수락하거나 이벤트 필터가 이를 처리할 때까지 상위 위젯 체인을 따라 전파됩니다. QGraphicsItem의 경우, ` QEvent::TouchBegin ` 이벤트는 마우스 아래에 있는 항목들로 전파됩니다(QGraphicsItem의 마우스 이벤트 전파와 유사함).
터치 포인트 그룹화
앞서 언급한 바와 같이, 여러 위젯이 동시에 QTouchEvent를 수신할 수 있습니다. 그러나 Qt는 동일한 위젯에 중복된 QEvent::TouchBegin 이벤트를 절대 전송하지 않도록 보장합니다. 이는 예를 들어, 사용자가 QGroupBox 내의 서로 다른 두 위젯을 터치했고, 두 위젯 모두 QEvent::TouchBegin 이벤트를 무시하는 경우와 같이, 전파 과정에서 이론적으로 발생할 수 있는 문제입니다.
이를 방지하기 위해 Qt는 다음 규칙에 따라 새로운 터치 지점을 그룹화합니다:
- 첫 번째 터치 지점이 감지되면, 대상 위젯은 먼저 화면상의 위치에 따라 결정되고, 그 다음으로 전파 규칙에 따라 결정됩니다.
- 추가 터치 지점이 감지되면, Qt는 먼저 새로운 터치 지점 아래에 있는 위젯의 조상 또는 자손 중 활성 터치 지점이 있는지 확인합니다. 활성 터치 지점이 있는 경우, 새로운 터치 지점은 첫 번째 터치 지점과 그룹화되며, 새로운 터치 지점은 첫 번째 터치 지점을 처리한 위젯으로 단일 QTouchEvent로 전송됩니다. (새로운 터치 지점 아래에 있는 위젯은 이벤트를 수신하지 않습니다).
이를 통해 형제 위젯들이 터치 이벤트를 독립적으로 처리할 수 있게 하면서도 QTouchEvent의 순서가 항상 올바르게 유지되도록 할 수 있습니다.
마우스 이벤트 및 터치 이벤트 합성
QTouchEvent 전달은 QMouseEvent 전달과 독립적입니다. 애플리케이션 플래그 Qt::AA_SynthesizeTouchForUnhandledMouseEvents 및 Qt::AA_SynthesizeMouseForUnhandledTouchEvents 를 사용하여 터치 이벤트를 마우스 이벤트로, 마우스 이벤트를 터치 이벤트로 자동 합성하는 기능을 활성화하거나 비활성화할 수 있습니다.
주의 사항
- 앞서 언급한 바와 같이, 터치 이벤트를 활성화하면 여러 위젯이 동시에 터치 이벤트를 수신할 수 있습니다. QTouchEvent에 대한 기본 QWidget::event() 처리 방식과 결합되면, 터치 사용자 인터페이스를 설계할 때 매우 높은 유연성을 얻을 수 있습니다. 이에 따른 영향을 유의하십시오. 예를 들어, 사용자가 한 손가락으로 QSlider 를 이동시키면서 다른 손가락으로 QPushButton 를 누르는 상황이 발생할 수 있습니다. 이러한 위젯에서 발신되는 신호는 서로 얽히게 됩니다.
- QTouchEvent 이벤트 핸들러 내에서 exec() 메서드(예: QDialog::exec() 또는 QMenu::exec()) 중 하나를 사용하여 이벤트 루프로 재귀를 수행하는 것은 지원되지 않습니다. 이벤트 수신자가 여러 개이므로, 재귀는 이벤트 손실 및 예기치 않은 무한 재귀를 포함하되 이에 국한되지 않는 문제를 일으킬 수 있습니다.
- QTouchEvent는 mouse grab 또는 active pop-up widget 의 영향을 받지 않습니다. 활성 터치 포인트가 두 개 이상인 상태에서 팝업을 열거나 마우스를 잡을 경우, QTouchEvent의 동작은 정의되지 않습니다.
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` 객체를 생성합니다.
[protected delete] QTouchEvent::QTouchEvent(QTouchEvent &&)
QTouchEvent 의 인스턴스를 move-construct로 생성합니다. 이 함수는 삭제되었습니다.
[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 연산 결과를 반환합니다.
[protected delete] QTouchEvent &QTouchEvent::operator=(QTouchEvent &&)
other 를 이 QTouchEvent 인스턴스에 할당합니다. 이 함수는 삭제되었습니다.
[noexcept protected default] QTouchEvent &QTouchEvent::operator=(const QTouchEvent &other)
other 를 이 QTouchEvent 인스턴스에 복사-할당합니다.
© 2026 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.