首页 文章

如何让QML ListView不能轻弹?

提问于
浏览
0

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

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

1 回答

  • 2

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

相关问题