0
ListView
がデスクトップコントロールのように振る舞い、マウスのドラッグにスクロールして反応しない方法があるのだろうか?QML ListViewをフリックできないようにするにはどうすればいいですか?
私はinteractive
プロパティについて知っていますが、ListView
は、クリック、マウスホイール、矢印キーに反応し、ScrollBar
が必要です。
ListView
がデスクトップコントロールのように振る舞い、マウスのドラッグにスクロールして反応しない方法があるのだろうか?QML ListViewをフリックできないようにするにはどうすればいいですか?
私はinteractive
プロパティについて知っていますが、ListView
は、クリック、マウスホイール、矢印キーに反応し、ScrollBar
が必要です。
interactive
からfalse
に設定すると、表示がほとんど固定されます。
keyNavigationEnabled
この瞬間(this critical bug)では機能しないような性質があります。
だから、それはあなたが好きな仕事を得るために少し余分な作業を行う必要があります:
MouseArea {
anchors.fill: ll
onWheel: ll.flick(0, wheel.angleDelta.y * 5)
}
ListView {
id: ll
model: 50
width: 50
height: 200
spacing: 5
focus: true
interactive: false
boundsBehavior: Flickable.StopAtBounds
Keys.onPressed: {
if (event.key === Qt.Key_Up) flick(0, 500)
else if (event.key === Qt.Key_Down) flick(0, -500)
}
delegate: Rectangle {
width: 50
height: 50
color: "red"
MouseArea {
anchors.fill: parent
onClicked: console.log("clicked")
}
}
}
対話は、キーナビゲーションを手動で実装されて無効になり、背景MouseArea
はホイールイベントを捕捉するために使用されます。非インタラクティブビューのアイテムをクリックするために特別な操作を行う必要はないことに注意してください。インタラクティブであるかどうかにかかわらずビューは動作します。
ありがとうございます。これはほとんど私をそこに連れて行きます。唯一のことは、デリゲートをクリックしても機能せず、「クリックされた」というメッセージがコンソールに表示されないことです。私はQt 5.8.0 RCを持っています。 –
@AlexJenter - 実際、リストビューの後ろに置くと、ホイールキャプチャマウスエリアがデリゲートを覆っているという問題が発生していました。回答の編集を参照してください。 – dtech
これは、ありがとうございます。これを解決する別の方法が見つかりました:ホイールキャプチャマウス領域のpropagateComposedEventsプロパティを "true"に設定してください。これは、トップレベルに移動し、兄弟コンポーネントを参照することを避けるのに役立ちます。 –