Qt Quick 입력 핸들러

Qt Quick 입력 핸들러는 UI에서 키보드, 터치, 마우스, 스타일러스( devices )의 events 를 처리하는 데 사용되는 QML 유형 집합입니다. MouseAreaFlickable 과 같은 이벤트 처리 항목과 달리 입력 핸들러는 명시적으로 시각적이지 않고 메모리를 덜 필요로 하며 상호작용 측면당 하나의 핸들러 인스턴스를 더 많이 사용하도록 고안되었습니다. 각 입력 핸들러 인스턴스는 parent 항목을 대신하여 특정 이벤트를 처리합니다. 따라서 시각적 문제와 동작 문제가 더 잘 분리되고 동작이 더 세분화된 구성으로 구축됩니다.

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

기존의 Keys 첨부 프로퍼티는 개념이 유사하므로 포인팅 디바이스 지향 핸들러와 Keys 을 함께 입력 핸들러 집합으로 참조합니다. 향후 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()를 참조하세요.) 그러나 포인터 핸들러에는 passive grab. 마우스 및 터치 press 이벤트는 먼저 각 항목의 하위 핸들러, 그 다음 Item 자체 순으로 모든 항목을 하향식 Z 순서로 방문하여 전달됩니다. 언론 이벤트가 전달될 때 핸들러는 필요에 따라 패시브 또는 독점 그래브를 취할 수 있습니다. 패시브 그랩을 사용하면 씬의 다른 아이템이나 핸들러가 패시브 또는 독점 등 어떤 종류의 그랩을 사용하더라도 업데이트와 릴리스를 받을 수 있습니다. 일부 핸들러(예: PointHandler)는 패시브 잡기만 가능하며, 다른 핸들러는 독점 잡기가 필요하며, 다른 핸들러는 제스처가 수행되고 있음을 감지할 때까지 패시브 잡기로 "잠복"한 다음 패시브에서 독점 잡기로 전환할 수 있습니다. TapHandler 의 잡기 동작은 configurable 입니다.

잡기 전환이 요청되면 PointerHandler::grabPermissions, QQuickItem::keepMouseGrab() 및 QQuickItem::keepTouchGrab()가 전환을 허용할지 여부를 제어합니다.

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