如何让QML ListView不能轻弹?

时间:2016-12-30 15:12:18

标签: qt listview qml qt-quick

我想知道ListView是否有任何方式表现得像桌面控件,而不是滚动鼠标拖动?

我知道interactive属性,但我仍然希望ListView对点击,鼠标滚轮,箭头键做出反应,并且ScrollBar

1 个答案:

答案 0 :(得分:3)

对于初学者来说,将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捕获车轮事件。请注意,您无需执行任何特殊操作即可启用非交互式视图的项目,无论视图是否具有交互性,它都可以正常工作。