WheelHandler QML Type
マウスホイールのハンドラ。詳細...
Import Statement: | import QtQuick |
Inherits: |
プロパティ
- acceptedButtons : flags
- acceptedDevices : flags
- acceptedModifiers : flags
- acceptedPointerTypes : flags
- active : bool
- activeTimeout : real
- blocking : bool
(since 6.3)
- cursorShape : Qt::CursorShape
- dragThreshold : int
- enabled : bool
- grabPermissions : flags
- invertible : bool
- margin : real
- orientation : enumeration
- parent : Item
- point : handlerPoint
- property : string
- rotation : real
- rotationScale : real
- target : Item
- targetScaleMultiplier : real
- targetTransformAroundCursor : bool
シグナル
- canceled(eventPoint point)
- grabChanged(PointerDevice::GrabTransition transition, eventPoint point)
- wheel(WheelEvent event)
詳細説明
WheelHandlerは、ユーザーがマウスホイールを回転させると、Itemの数値プロパティをインタラクティブに操作するために使用されるハンドラです。他の入力ハンドラと同様に、デフォルトではtarget を操作します。どのプロパティを操作するかを制御するには、property を宣言します:
import QtQuick Rectangle { width: 170; height: 120 color: "green"; antialiasing: true WheelHandler { property: "rotation" onWheel: (event)=> console.log("rotation", event.angleDelta.y, "scaled", rotation, "@", point.position, "=>", parent.rotation) } }
BoundaryRule は、WheelHandler(および他のInput Handler)と組み合わせて、ターゲットプロパティが持つことができる値の許容範囲を宣言するのに非常に便利です。例えば、WheelHandlerと の組み合わせを使ってスクロールを実装し、ユーザがホイールを回転させたり、タッチスクリーン上でアイテムをドラッグしたときに、スクロール可能なItemの プロパティを操作し、 で上から下への移動範囲を制限することが可能です:DragHandler y BoundaryRule
import QtQuick import Qt.labs.animation Item { width: 320; height: 480 Flow { id: content width: parent.width spacing: 2; padding: 2 WheelHandler { orientation: Qt.Vertical property: "y" rotationScale: 15 acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad onActiveChanged: if (!active) ybr.returnToBounds() } DragHandler { xAxis.enabled: false onActiveChanged: if (!active) ybr.returnToBounds() } BoundaryRule on y { id: ybr minimum: content.parent.height - content.height maximum: 0 minimumOvershoot: 400; maximumOvershoot: 400 overshootFilter: BoundaryRule.Peak } Repeater { model: 1000 Rectangle { color: "gray"; width: 10 + Math.random() * 100; height: 15 } } } }
あるいは、property が設定されていないか、targetが NULL の場合、WheelHandler は自動的に何も操作しません。rotation プロパティをバインディングで使用して別のプロパティを操作することもできますし、onWheel
を実装してホイールイベントを直接処理することもできます。
WheelHandlerは、デフォルトでは回転するマウスホイールだけを処理します。これは、acceptedDevices を設定することで変更できます。
MouseArea,Flickable,Qt Quick Examples - Pointer Handlersも参照してください 。
プロパティの説明
acceptedButtons : flags |
この Pointer ハンドラをアクティブにすることができるマウスボタン。
デフォルトでは、このプロパティはQt.LeftButton に設定されています。 マウスボタンの OR の組み合わせに設定することができ、他のボタンからのイベントは無視されます。
例えば、コントロールが左クリックと右クリックに異なる方法で反応するように、2つのハンドラを設定することができます:
Item { TapHandler { onTapped: console.log("left clicked") } TapHandler { acceptedButtons: Qt.RightButton onTapped: console.log("right clicked") } }
注: タッチスクリーンをタップしたり、グラフィックタブレットのスタイラスをタップしたりすると、マウスの左ボタンをクリックしたことになります。この動作はacceptedDevices またはacceptedPointerTypes で変更できます。
acceptedDevices : flags |
このハンドラをアクティブにできるポインティングデバイスのタイプ。
デフォルトでは、このプロパティはPointerDevice.Mouse に設定されており、実際のマウスホイールからのイベントのみに反応するようになっています。
WheelHandler は、acceptedDevices を に設定することで、マウスホイールとタッチパッドの両方のスクロールに反応するようにすることができます。PointerDevice.Mouse | PointerDevice.TouchPad
注意: マウス以外のハードウェア(タッチセンシティブのワコムタブレットやLinuxラップトップのタッチパッドなど)の中には、ジェスチャーから実際のホイールイベントを生成するものがある。acceptedDevices
がデフォルト値のままであっても、WheelHandler はそれらのイベントにホイールイベントとして反応する。
acceptedModifiers : flags |
このプロパティが設定されると、ポインタ・イベントに反応するために、指定されたキーボード修飾子が押される必要があり、そうでなければ無視される。
このプロパティがQt.KeyboardModifierMask
(デフォルト値)に設定されている場合、PointerHandler は修飾キーを無視する。
例えば、Item は同じタイプのハンドラを2つ持つことができ、そのうちの1つは、必要なキーボード修飾子が押された場合にのみ有効になる:
Item { TapHandler { acceptedModifiers: Qt.ControlModifier onTapped: console.log("control-tapped") } TapHandler { acceptedModifiers: Qt.NoModifier onTapped: console.log("tapped") } }
acceptedModifiers
を修飾キーの OR の組み合わせに設定した場合、ハンドラを有効にするには、それらの修飾キーがすべて押されなければならないことを意味します:
Item { TapHandler { acceptedModifiers: Qt.ControlModifier | Qt.AltModifier | Qt.ShiftModifier onTapped: console.log("control-alt-shift-tapped") } }
使用可能な修飾子は以下の通りです:
定数 | 説明 |
---|---|
NoModifier | 修飾キーは使用できません。 |
ShiftModifier | キーボードのShiftキーが押されていなければならない。 |
ControlModifier | キーボードの Ctrl キーが押されていなければならない。 |
AltModifier | キーボードのAltキーが押されていること。 |
MetaModifier | キーボードのMetaキーが押されていなければならない。 |
KeypadModifier | キーパッドのボタンが押されていること。 |
GroupSwitchModifier | X11のみ(Windowsではコマンドライン引数で有効にしない)。キーボードのMode_switchキーが押されていなければならない。 |
KeyboardModifierMask | ハンドラーは、どの修飾子が押されたかは気にしない。 |
複数のハンドラと複数の修飾子フラグの組み合わせで実現できるよりもさらに複雑な動作が必要な場合は、JavaScriptコードで修飾子をチェックできます:
Item { TapHandler { onTapped: switch (point.modifiers) { case Qt.ControlModifier | Qt.AltModifier: console.log("CTRL+ALT"); break; case Qt.ControlModifier | Qt.AltModifier | Qt.MetaModifier: console.log("CTRL+META+ALT"); break; default: console.log("other modifiers", point.modifiers); break; } } }
Qt::KeyboardModifierも参照して ください。
acceptedPointerTypes : flags |
このポインタ・ハンドラをアクティブにできるポインティング・インストゥルメントのタイプ(指、スタイラス、消しゴムなど)。
デフォルトでは、このプロパティはPointerDevice.AllPointerTypes に設定されています。デバイスタイプの OR の組み合わせに設定すると、一致しないdevices からのイベントは無視されます。
たとえば、マウス、タッチ、スタイラスのクリックには何らかの方法で反応するが、グラフィック・タブレットの消しゴムツールでタップするとそれ自体を削除するようなコントロールを、2つのハンドラで作成することができます:
Rectangle { id: rect TapHandler { acceptedPointerTypes: PointerDevice.Generic | PointerDevice.Finger | PointerDevice.Pen onTapped: console.log("clicked") } TapHandler { acceptedPointerTypes: PointerDevice.Eraser onTapped: rect.destroy() } }
active : bool |
これは、この入力ハンドラが1つまたは複数のeventPoints 、それらのポイントの排他的なグラブを成功させることで、そのハンドラを渡すための唯一の責任を取ったときはいつでも、true
を保持します。これは、それらのイベントポイントの動きに応じて、そのプロパティを最新に保ち、target (もしあれば)を積極的に操作していることを意味する。
activeTimeout : real |
アクティブ・プロパティが、これ以上ホイール・イベントを受信しない場合にfalse
に戻るまでの時間を秒単位で指定する。デフォルトは0.1
(100 ms)。
いくつかのタッチパッドからのイベントなど、scroll phase の情報を含むイベントをWheelHandler で処理する場合、フェーズQt::ScrollEnd のイベントを受信するとすぐにアクティブ・プロパティは false
になります。この場合、タイムアウトは必要ありません。この場合、タイムアウトは必要ありません。しかし、従来のホイール付きマウスはスクロールフェーズを提供しません。マウスは、ユーザーがスクロールを停止することを決定したときを検出できないため、アクティブプロパティは、この時間が経過した後にfalse
に遷移します。
QWheelEvent::phase()も参照してください 。
blocking : bool |
このハンドラが、その後ろにある他のアイテムやハンドラが同じホイールイベントを処理するのを防ぐかどうか。このプロパティはデフォルトでtrue
です。
このプロパティは Qt 6.3 で導入されました。
cursorShape : Qt::CursorShape |
このプロパティは、active がtrue
である間に、マウスがparent アイテムの上に置かれたときに表示されるカーソル形状を保持します。
利用可能なカーソル形状は以下の通りです:
- Qt.ArrowCursor
- Qt.UpArrowCursor
- Qt.CrossCursor
- Qt.WaitCursor
- Qt.IBeamCursor
- Qt.SizeVerCursor
- Qt.SizeHorCursor
- Qt.SizeBDiagCursor
- Qt.SizeFDiagCursor
- Qt.SizeAllCursor
- Qt.BlankCursor
- Qt.SplitVCursor
- Qt.SplitHCursor
- Qt.PointingHandCursor
- Qt.ForbiddenCursor
- Qt.WhatsThisCursor
- Qt.BusyCursor
- Qt.OpenHandCursor
- Qt.ClosedHandCursor
- Qt.DragCopyCursor
- Qt.DragMoveCursor
- Qt.DragLinkCursor
デフォルト値は設定されていないため、parent アイテムのcursor が表示されます。このプロパティは、undefined に設定することで、同じ初期状態に戻すことができます。
注意: このプロパティが設定されていない場合、またはundefined
に設定されている場合、値を読み取るとQt.ArrowCursor
が返されます。
Qt::CursorShape 、QQuickItem::cursor()、HoverHandler::cursorShapeも参照のこと 。
dragThreshold : int |
ドラッグ ジェスチャとして扱うために、ユーザーがeventPoint をドラッグしなければならない距離をピクセル単位で指定します。
デフォルト値はプラットフォームと画面解像度によって異なります。undefinedに設定することで、デフォルト値に戻すことができます。ドラッグ ジェスチャが開始されたときの動作は、ハンドラによって異なります。
enabled : bool |
PointerHandler が無効になっている場合、すべてのイベントを拒否し、シグナルは発行されません。
grabPermissions : flags |
このプロパティは、このハンドラのロジックが排他的なグラブを引き継ぐことを決定したとき、または他のハンドラからグラブの引き継ぎやキャンセルを承認するよう求められたときのパーミッションを指定します。
定数 | 説明 |
---|---|
PointerHandler.TakeOverForbidden | このハンドラは、ItemまたはHandlerのどのタイプからもグラブパーミッションを取ることも与えることもできません。 |
PointerHandler.CanTakeOverFromHandlersOfSameType | このハンドラは、同じクラスの他のハンドラから排他的グラブを取ることができます。 |
PointerHandler.CanTakeOverFromHandlersOfDifferentType | このハンドラは、あらゆる種類のハンドラから排他的なグラブを取ることができます。 |
PointerHandler.CanTakeOverFromItems | このハンドラは、どのタイプのItemからも排他的グラブを取ることができます。 |
PointerHandler.CanTakeOverFromAnything | このハンドラは、どのタイプのアイテムまたはハンドラからも排他的グラブを取ることができます。 |
PointerHandler.ApprovesTakeOverByHandlersOfSameType | このハンドラーは、同じクラスの他のハンドラーがグラブを取ることを許可します。 |
PointerHandler.ApprovesTakeOverByHandlersOfDifferentType | このハンドラーは、あらゆる種類のハンドラーにグラブを取る許可を与えます。 |
PointerHandler.ApprovesTakeOverByItems | このハンドラーは、あらゆる種類のItemがグラブを取ることを許可します。 |
PointerHandler.ApprovesCancellation | このハンドラは、そのグラブが null に設定されることを許可します。 |
PointerHandler.ApprovesTakeOverByAnything | このハンドラはどんな種類のItemやハンドラにもグラブを取る許可を与えます。 |
デフォルトはPointerHandler.CanTakeOverFromItems | PointerHandler.CanTakeOverFromHandlersOfDifferentType | PointerHandler.ApprovesTakeOverByAnything
で、ほとんどの引き継ぎシナリオを許可しますが、例えば2つのPinchHandlerが同じタッチポイントを取り合うことを避けます。
invertible : bool |
QWheelEvent::inverted がtrue
の場合、プロパティの変更方向を逆にするかどうか。デフォルトはtrue
である。
オペレーティングシステムが、スクロールを指の動きと同じ方向にする「自然スクロール」設定を持っている場合、このプロパティがtrue
に設定され、WheelHandler がターゲットに直接プロパティを設定している場合、動きの方向はシステム設定に対応する。このプロパティがfalse
に設定されている場合、rotation を反転させ、移動方向が常に指の移動方向と同じになるようにする。
margin : real |
eventPoint がこのハンドラを起動できるparent 項目の境界を超えるマージン。たとえば、target がparent
でもあるPinchHandler では、parent
が非常に小さなサイズに縮小されてもピンチ・ジェスチャーが可能なように、一般的なユーザーの指の幅の少なくとも半分の距離にこれを設定すると便利です。また、TapHandler ベースのボタンが画面の端の近くに配置されている場合、フィッツの法則に準拠するために使用することができます:ボタンが視覚的に端から数ピクセル離れていても、画面の端でマウスクリックに反応します。
デフォルト値は0です。
orientation : enumeration |
どのホイールに反応するか。デフォルトはQt.Vertical
です。
すべてのマウスにHorizontal
ホイールがあるわけではありません。ホイールを横に傾けることでエミュレートされることもあります。タッチパッドは通常、縦方向と横方向の両方のホイールイベントを生成できる。
parent : Item |
ハンドラのスコープであるItem 。ハンドラはこのItemに代わってイベントを処理する。つまり、eventPoints の少なくとも1つがItemの内部で発生した場合、ポインタイベントが関連する。最初はtarget() が同じであるが、再割り当てが可能である。
target およびQObject::parent()も参照のこと 。
point : handlerPoint |
eventPoint 現在扱われている点。現在扱われている点がない場合、このオブジェクトはデフォルト値(すべての座標が0)にリセットされます。
property : string |
マウスホ イ ールが回転 さ れた と き にタ ーゲ ッ ト上で変更 さ れ る プ ロ パテ ィ 。
デフォルトはプロパティなし(空文字列)です。ターゲットのプロパティが自動的に変更されない場合、バインディングを使用して任意の方法でマウスホイールの回転に反応させることができます。
任意の数値プロパティを調整するためにマウスホイールを使用することができます。た と えば、property
がx
に設定 さ れてい る と き は、タ ーゲ ッ トはホイールの回転に伴って水平方向に移動 し ます。以下のプロパティは特別な動作をします:
定数 | 説明 |
---|---|
scale | scale は、 で説明されているように、非線形に変更されます。 が の場合、 と プロパティは同時に調整され、ユーザーはマウスカーソルの下のポイントに効果的にズームインまたはズームアウトします。targetScaleMultiplier targetTransformAroundCursor true x y |
rotation | rotation rotation targetTransformAroundCursor が の場合、l{ }{x} プロパティと プロパティが同時に調整され、ユーザーがマウスカーソル下の点を中心にアイテムを効果的に回転できるようになります。true QQuickItem::x y |
指定されたターゲットプロパティの調整は、常にrotationScale でスケーリングされる。
rotation : real |
このプロパティが最後に設定されたときから、マウスホイールが回転された角度をホイール度で表す。
正の値は、ホイールが上/右に回転されたことを示し、負の値は、ホイールが下/左に回転されたことを示す。
基本的なマウスのクリックホイールは15度単位で動作します。
起動時のデフォルトは0
です。プログラムによっていつでも任意の値に設定することができます。ユーザーがマウスホイールを回転させると、値が調整されます。
orientationも参照のこと 。
rotationScale : real |
target : Item |
このハンドラが操作するアイテム。
デフォルトでは、ハンドラが宣言されているItem(parent )と同じである。しかし、あるItem内のイベントを処理し、別のItemを操作するために、ターゲットを別のItemに設定したり、null
、デフォルトの動作を無効にし、代わりに別の動作を行うために、ターゲットを別のItemに設定すると便利な場合がある。
targetScaleMultiplier : real |
rotation が 15 度変化するたびに、ターゲット scale が乗算される量。これは、property が"scale"
のときのみ関係する。
scale
にはtargetScaleMultiplier
angleDelta *rotationScale / 15 が掛けられる。デフォルトは2
1/3 で、これはrotationScale がデフォルト値のままで、マウスホイールが1回 "クリック" (15度) 回転すると、ターゲットがおよそ1.25倍拡大されることを意味します。3回 "クリック" すると、ホイールの回転方向によって、そのサイズは2倍または半分になります。ホイールを2回クリックするごとに2倍または半分にしたい場合は、2
1/2(1.4142)に設定します。ホイールの回転方向と逆にスケールさせたい場合は、rotationScale
に負の値を設定します。
targetTransformAroundCursor : bool |
property が調整されている間、ターゲットがマウスカーソルの位置を中心に変換されるように自動的に再配置されるかどうか。デフォルトはtrue
。
property が"rotation"
に設定され、targetTransformAroundCursor がtrue
である場合、ホイールが回転されるにつれて、ターゲットアイテムはマウスカーソルの位置を中心にその場で回転する。targetTransformAroundCursor
がfalse
の場合、代わりにtransformOrigin を中心に回転する。
シグナル・ドキュメント
canceled(eventPoint point) |
このハンドラがすでに与えられたpoint をつかんでいる場合、このシグナルは、別のポインタハンドラまたはアイテムによってつかみが盗まれたときに発行されます。
注意: 対応するハンドラはonCanceled
です。
grabChanged(PointerDevice::GrabTransition transition, eventPoint point) |
このシグナルは、このハンドラに関連する何らかの方法でグラブが変更されたときに発せられます。
transition (動詞)は何が起こったかを示す。point (オブジェクト)は、グラブされた、またはグラブされなかったポイントです。
transition の有効な値は以下の通りです:
定数 | 説明 |
---|---|
PointerDevice.GrabExclusive | このハンドラは、point を処理するための主要な責任を負った。 |
PointerDevice.UngrabExclusive | このハンドラは、以前の排他的グラブを放棄した。 |
PointerDevice.CancelGrabExclusive | このハンドラの排他的グラブは引き継がれたかキャンセルされた。 |
PointerDevice.GrabPassive | このハンドラは、point を監視するために、パッシブグラブを獲得した。 |
PointerDevice.UngrabPassive | このハンドラーは以前のパッシブグラブを放棄した。 |
PointerDevice.CancelGrabPassive | このハンドラの前のパッシブグラブが異常終了した。 |
注: 対応するハンドラはonGrabChanged
。
wheel(WheelEvent event) |
このシグナルは、このハンドラがQWheelEvent 型のevent を受け取るたびに、つまり、ホイールが動かされたり、スクロールジェスチャが更新されたりするたびに発せられます。
注: 対応するハンドラはonWheel
です。
本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。