このページでは

Qt Quick 入力ハンドラ

Qt Quick 入力ハンドラは、UI におけるキーボード、タッチ、マウス、およびスタイラスdevices からの「events 」を処理するために使用される一連の QML 型です。MouseArea やFlickable などのイベント処理アイテムとは対照的に、入力ハンドラは明示的に非視覚的であり、必要なメモリが少なく、より多くの数で使用されることを意図しています。つまり、インタラクションの側面ごとに 1 つのハンドラインスタンスが割り当てられます。 各入力ハンドラインスタンスは、そのparent アイテムに代わって特定のイベントを処理します。これにより、視覚的な側面と動作的な側面がより明確に分離され、よりきめ細かな構成によって動作が構築されます。

「Qt Quick Examples - Pointer Handlers」では、これらのユースケースをいくつか紹介しています。

既存の「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() を参照してください。) しかし、ポインタ・ハンドラには追加のメカニズムとして「passive grab 」が利用可能です。マウスおよびタッチのpress イベントは、Z順(上から下へ)ですべてのアイテムを順に処理することで配信されます。まず各アイテムの子ハンドラが処理され、その後、Item 自体で処理されます。 押下イベントが配信された時点で、ハンドラーは必要に応じてパッシブ・グラブまたは排他的グラブのいずれかを行うことができます。パッシブ・グラブを行った場合、シーン内の他のアイテムやハンドラーがパッシブ・グラブや排他的グラブのいずれかを行っていたとしても、更新イベントとリリースイベントを確実に受け取ることができます。 一部のハンドラー(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.