WheelHandler QML Type

マウスホイールのハンドラ。詳細...

Import Statement: import QtQuick
Inherits:

SinglePointHandler

プロパティ

シグナル

  • 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キーパッドのボタンが押されていること。
GroupSwitchModifierX11のみ(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 [read-only]

これは、この入力ハンドラが1つまたは複数のeventPoints 、それらのポイントの排他的なグラブを成功させることで、そのハンドラを渡すための唯一の責任を取ったときはいつでも、true を保持します。これは、それらのイベントポイントの動きに応じて、そのプロパティを最新に保ち、target (もしあれば)を積極的に操作していることを意味する。


activeTimeout : real

アクティブ・プロパティが、これ以上ホイール・イベントを受信しない場合にfalse に戻るまでの時間を秒単位で指定する。デフォルトは0.1 (100 ms)。

いくつかのタッチパッドからのイベントなど、scroll phase の情報を含むイベントをWheelHandler で処理する場合、フェーズQt::ScrollEnd のイベントを受信するとすぐにアクティブ・プロパティは false になります。この場合、タイムアウトは必要ありません。この場合、タイムアウトは必要ありません。しかし、従来のホイール付きマウスはスクロールフェーズを提供しません。マウスは、ユーザーがスクロールを停止することを決定したときを検出できないため、アクティブプロパティは、この時間が経過した後にfalse に遷移します。

QWheelEvent::phase()も参照してください


blocking : bool [since 6.3]

このハンドラが、その後ろにある他のアイテムやハンドラが同じホイールイベントを処理するのを防ぐかどうか。このプロパティはデフォルトでtrue です。

このプロパティは Qt 6.3 で導入されました。


cursorShape : Qt::CursorShape

このプロパティは、activetrue である間に、マウスが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::CursorShapeQQuickItem::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::invertedtrue の場合、プロパティの変更方向を逆にするかどうか。デフォルトはtrue である。

オペレーティングシステムが、スクロールを指の動きと同じ方向にする「自然スクロール」設定を持っている場合、このプロパティがtrue に設定され、WheelHandlerターゲットに直接プロパティを設定している場合、動きの方向はシステム設定に対応する。このプロパティがfalse に設定されている場合、rotation を反転させ、移動方向が常に指の移動方向と同じになるようにする。


margin : real

eventPoint がこのハンドラを起動できるparent 項目の境界を超えるマージン。たとえば、targetparent でもあるPinchHandler では、parent が非常に小さなサイズに縮小されてもピンチ・ジェスチャーが可能なように、一般的なユーザーの指の幅の少なくとも半分の距離にこれを設定すると便利です。また、TapHandler ベースのボタンが画面の端の近くに配置されている場合、フィッツの法則に準拠するために使用することができます:ボタンが視覚的に端から数ピクセル離れていても、画面の端でマウスクリックに反応します。

デフォルト値は0です。


orientation : enumeration

どのホイールに反応するか。デフォルトはQt.Vertical です。

すべてのマウスにHorizontal ホイールがあるわけではありません。ホイールを横に傾けることでエミュレートされることもあります。タッチパッドは通常、縦方向と横方向の両方のホイールイベントを生成できる。


parent : Item

ハンドラのスコープであるItem 。ハンドラはこのItemに代わってイベントを処理する。つまり、eventPoints の少なくとも1つがItemの内部で発生した場合、ポインタイベントが関連する。最初はtarget() が同じであるが、再割り当てが可能である。

target およびQObject::parent()も参照のこと


point : handlerPoint [read-only]

eventPoint 現在扱われている点。現在扱われている点がない場合、このオブジェクトはデフォルト値(すべての座標が0)にリセットされます。


property : string

マウスホ イ ールが回転 さ れた と き にタ ーゲ ッ ト上で変更 さ れ る プ ロ パテ ィ 。

デフォルトはプロパティなし(空文字列)です。ターゲットのプロパティが自動的に変更されない場合、バインディングを使用して任意の方法でマウスホイールの回転に反応させることができます。

任意の数値プロパティを調整するためにマウスホイールを使用することができます。た と えば、propertyx に設定 さ れてい る と き は、タ ーゲ ッ トはホイールの回転に伴って水平方向に移動 し ます。以下のプロパティは特別な動作をします:

定数説明
scalescale は、 で説明されているように、非線形に変更されます。 が の場合、 と プロパティは同時に調整され、ユーザーはマウスカーソルの下のポイントに効果的にズームインまたはズームアウトします。targetScaleMultiplier targetTransformAroundCursor true x y
rotationrotation rotation targetTransformAroundCursor が の場合、l{ }{x} プロパティと プロパティが同時に調整され、ユーザーがマウスカーソル下の点を中心にアイテムを効果的に回転できるようになります。trueQQuickItem::x y

指定されたターゲットプロパティの調整は、常にrotationScale でスケーリングされる。


rotation : real

このプロパティが最後に設定されたときから、マウスホイールが回転された角度をホイール度で表す。

正の値は、ホイールが上/右に回転されたことを示し、負の値は、ホイールが下/左に回転されたことを示す。

基本的なマウスのクリックホイールは15度単位で動作します。

起動時のデフォルトは0 です。プログラムによっていつでも任意の値に設定することができます。ユーザーがマウスホイールを回転させると、値が調整されます。

orientationも参照のこと


rotationScale : real

rotation プロパティに適用されるスケーリングと、ターゲット・アイテムのproperty に適用されるスケーリング(もしあれば)。デフォルトは 1 で、rotation は回転度単位になります。負の数を設定すると、マウスホイールの回転方向の効果を反転させることができます。


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 である場合、ホイールが回転されるにつれて、ターゲットアイテムはマウスカーソルの位置を中心にその場で回転する。targetTransformAroundCursorfalse の場合、代わりに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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。