이 페이지에서

Qt Quick 입력 핸들러

Qt Quick 입력 핸들러는 UI에서 키보드, 터치, 마우스 및 스타일러스 devices 로부터 발생하는 입력 이벤트( events )를 처리하는 데 사용되는 QML 유형 집합입니다. MouseArea 및 Flickable 와 같은 이벤트 처리 항목과 달리, 입력 핸들러는 명백히 비시각적이며 메모리 사용량이 적고, 상호작용의 각 측면에 대해 하나의 핸들러 인스턴스를 사용하는 등 더 많은 수로 사용되도록 설계되었습니다. 각 입력 핸들러 인스턴스는 해당 parent 항목을 대신하여 특정 이벤트를 처리합니다. 따라서 시각적 요소와 동작적 요소가 더 잘 분리되며, 동작은 더 세분화된 조합을 통해 구성됩니다.

'Qt Quick 예제 - 포인터 핸들러'에서는 이에 대한 몇 가지 사용 사례를 보여줍니다.

기존의 ‘ Keys ’ 부착 속성은 개념적으로 유사하므로, 포인팅 장치 중심의 핸들러와 ‘ Keys ’를 통틀어 ‘입력 핸들러(Input Handlers)’ 세트라고 부릅니다. 향후 Qt 버전에서는 더 많은 부착 속성 사용 사례를 제공할 예정입니다.

입력 핸들러

DragHandler

드래그용 핸들러

HoverHandler

마우스 및 태블릿 호버용 핸들러

KeyNavigation

화살표 키를 이용한 키 내비게이션 지원

Keys

항목에 대한 키 처리 기능 제공

PinchHandler

핀치 제스처용 핸들러

PointHandler

단일 터치 지점에 반응하는 핸들러

TapHandler

탭 및 클릭 처리기

WheelHandler

마우스 휠 처리 기능

주요 기능

주요 기능은 다음과 같습니다:

  • 포커스가 맞춰진 항목 내의 키 입력을 처리합니다
  • 어떤 기기에서 발생하든 탭이나 드래그와 같은 제스처를 처리
  • 서로 다른 종류의 장치에서 발생하는 제스처를 각기 다른 방식으로 처리
  • 각 항목에는 무제한의 핸들러를 지정할 수 있습니다

아이템을 조작하는 핸들러

일부 핸들러는 단순히 아이템 내부에 선언되는 것만으로도 상호작용을 추가합니다:

import QtQuick

Rectangle {
    width: 100
    height: 100
    color: "lightsteelblue"
    DragHandler { }
}

핸들러 속성 및 신호

모든 핸들러는 바인딩에 사용할 수 있는 속성과, 입력에 반응하기 위해 처리할 수 있는 신호를 가지고 있습니다:

import QtQuick

Rectangle {
    id: button
    signal clicked

    width: 150; height: 50; radius: 3
    color: tapHandler.pressed ? "goldenrod" : hoverHandler.hovered ? "wheat" : "beige"
    border.color: activeFocus ? "brown" : "transparent"
    focus: true

    HoverHandler {
        id: hoverHandler
    }

    TapHandler {
        id: tapHandler
        onTapped: button.clicked()
    }

    Keys.onEnterPressed: button.clicked()
}

포인터 그랩

포인터 핸들러와 관련된 중요한 개념은 핸들러가 수행하는 그랩의 유형입니다. 아이템이 수행할 수 있는 유일한 그랩 유형은 배타적 그랩입니다. 예를 들어 ` QPointerEvent::setExclusiveGrabber()`를 호출하면, 이후의 마우스 이동 및 마우스 릴리스 이벤트는 해당 객체에만 전송됩니다. (이러한 배타성에 대한 해결책으로는 ` QQuickItem::setFiltersChildMouseEvents()` 및 ` QQuickItem::childMouseEventFilter()`를 참조하십시오.) 그러나 포인터 핸들러(Pointer Handlers)에는 '비독점 그랩( passive grab)'이라는 추가 메커니즘이 있습니다. 마우스 및 터치 이벤트( press )는 Z 순서 상에서 위에서 아래로 모든 아이템을 순차적으로 방문하여 전달됩니다. 먼저 각 아이템의 자식 핸들러(child Handlers)가 처리한 다음, 포인터 핸들러( Item ) 자체가 처리합니다. 누름 이벤트가 전달될 때, 핸들러는 필요에 따라 수동 그랩(passive grab) 또는 배타적 그랩(exclusive grab) 중 하나를 선택할 수 있습니다. 수동 그랩을 선택하면, 씬 내의 다른 아이템이나 핸들러가 수동 또는 배타적 그랩을 수행하더라도 업데이트 및 해제 이벤트를 반드시 수신하게 됩니다. 일부 핸들러(예: PointHandler)는 수동 그랩에서만 작동할 수 있고, 다른 핸들러는 배타적 그랩을 필요로 하며, 또 다른 핸들러는 제스처가 수행되고 있음을 감지할 때까지 수동 그랩 상태로 "대기"하다가 수동 그랩에서 배타적 그랩으로 전환할 수 있습니다. TapHandler 의 그랩 동작은 configurable 에서 확인할 수 있습니다.

그랩 전환이 요청되면, PointerHandler::grabPermissions, QQuickItem::keepMouseGrab() 및 QQuickItem::keepTouchGrab()가 해당 전환이 허용될지 여부를 제어합니다.

© 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.