Qt クイック入力ハンドラ

Qt Quick Input Handlers は、キーボード、タッチ、マウス、スタイラスdevices からのevents を UI で処理するための QML タイプのセットです。MouseAreaFlickable のようなイベントハンドリング項目とは対照的に、入力ハンドラは明示的に非ビジュアルで、より少ないメモリしか必要とせず、インタラクションのアスペクトごとに1つのハンドラインスタンスというように、より多くの数を使用することを意図しています。各入力ハンドラインスタンスは、parent アイテムの代わりに特定のイベントを処理する。このように、ビジュアルとビヘイビアは分離され、ビヘイビアはより細かいコンポジションによって構築されます。

Qt Quick Examples - Pointer Handlersは、これらの使用例を示しています。

既存のKeys attached プロパティも同様のコンセプトなので、ポインティングデバイス指向のハンドラとKeys を合わせて、Input ハンドラのセットと呼びます。Qt の将来のバージョンでは、attached プロパティの使用例がさらに増えることを期待しています。

入力ハンドラ

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順序で訪問することによって配信されます:最初に各Itemの子ハンドラ、次にItem 自体。プレスイベントが配信される時、ハンドラーはその必要性に応じてパッシブグラブかエクスクルーシブグラブのどちらかを取ることができます。パッシブグラブを取ると、シーン内の他のItemやHandlerがパッシブでもエクスクルーシブでもどんなグラブを取っても、更新とリリースを受け取ることが保証されます。パッシブグラブのみで動作するハンドラー(PointHandler など)もあれば、排他的グラブを必要とするハンドラーもあります。また、ジェスチャーが実行されていることを検知するまでパッシブグラブで「待機」し、パッシブグラブから排他的グラブに移行するハンドラーもあります。TapHandlerのグラブ動作はconfigurable です。

グラブの遷移が要求されたとき、PointerHandler::grabPermissionsQQuickItem::keepMouseGrab() とQQuickItem::keepTouchGrab() は、遷移が許可されるかどうかを制御します。

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。