我想知道是否有任何方法可以让
ListView
表现得像桌面控件一样,而不会对滚动到鼠标拖动做出反应?
我知道
interactive
属性,但我仍然希望 ListView
对点击、鼠标滚轮、箭头键做出反应,并且有一个 ScrollBar
。
对于初学者来说,将
interactive
设置为 false
几乎可以固定视图。
有一个
keyNavigationEnabled
属性目前似乎不起作用(这个严重错误)。
因此需要做一些额外的工作才能使其按您想要的方式工作:
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
用于捕获滚轮事件。请注意,您无需执行任何特殊操作即可启用单击非交互式视图的项目,无论视图是否交互式,它都可以工作。
添加
DragHandler
和 target: null
可防止用鼠标拖动它:
import QtQuick 2.12
ListView {
DragHandler {
target: null
}
}
如果您在
MouseArea
/ ListView
的子项中有 GridView
那么您还必须像这样修补 MouseArea
:
MouseArea {
drag.target: Item {}
DragHandler {}
}
否则它会以某种方式传播并拖动可轻弹。
适用于 Qt 6.6。也许有人可以解释这个逻辑。