如何让 QML ListView 不可轻弹?

How make QML ListView not flickable?

我想知道是否有任何方法可以让 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用于捕获车轮事件。请注意,您无需执行任何特殊操作即可启用非交互式视图的项目点击,无论视图是否为交互式视图,它都可以正常工作。