Qt クイック入力ハンドラ
Qt Quick Input Handlers は、キーボード、タッチ、マウス、スタイラスdevices からのevents を UI で処理するための QML タイプのセットです。MouseArea やFlickable のようなイベントハンドリング項目とは対照的に、入力ハンドラは明示的に非ビジュアルで、より少ないメモリしか必要とせず、インタラクションのアスペクトごとに1つのハンドラインスタンスというように、より多くの数を使用することを意図しています。各入力ハンドラインスタンスは、parent アイテムの代わりに特定のイベントを処理する。このように、ビジュアルとビヘイビアは分離され、ビヘイビアはより細かいコンポジションによって構築されます。
Qt Quick Examples - Pointer Handlersは、これらの使用例を示しています。
既存のKeys attached プロパティも同様のコンセプトなので、ポインティングデバイス指向のハンドラとKeys
を合わせて、Input ハンドラのセットと呼びます。Qt の将来のバージョンでは、attached プロパティの使用例がさらに増えることを期待しています。
入力ハンドラ
ドラッグ用ハンドラ | |
マウスとタブレットのホバー用ハンドラ | |
矢印キーによるキーナビゲーションをサポート | |
アイテムへのキーハンドリング | |
ピンチジェスチャー用ハンドラ | |
単一のタッチポイントに反応するハンドラ | |
タップとクリック用ハンドラ | |
マウスホイール用ハンドラ |
主な機能
主な機能は以下の通りです:
- フォーカスされたアイテム内のキー入力を処理
- デバイスに関係なく、タップやドラッグなどのジェスチャーを処理します。
- 異なるクラスのデバイスからのジェスチャーを異なる方法で扱う
- 各アイテムは無制限のハンドラを持つことができます。
アイテムを操作するハンドラ
ハンドラの中には、アイテムの内部で宣言されるだけで、インタラクティブ性を追加するものがあります:
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::grabPermissions 、QQuickItem::keepMouseGrab() とQQuickItem::keepTouchGrab() は、遷移が許可されるかどうかを制御します。
関連情報
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。