如何让QML ListView不可滑动?

问题描述 投票:0回答:2

我想知道是否有任何方法可以让

ListView
表现得像桌面控件一样,而不会对滚动到鼠标拖动做出反应?

我知道

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

qt listview qml qt-quick
2个回答
3
投票

对于初学者来说,将

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
用于捕获滚轮事件。请注意,您无需执行任何特殊操作即可启用单击非交互式视图的项目,无论视图是否交互式,它都可以工作。


0
投票

添加

DragHandler
target: null
可防止用鼠标拖动它:

import QtQuick 2.12

ListView {
    DragHandler {
        target: null
    }
}

如果您在

MouseArea
/
ListView
的子项中有
GridView
那么您还必须像这样修补
MouseArea

MouseArea {
    drag.target: Item {}
    DragHandler {}
}

否则它会以某种方式传播并拖动可轻弹。

适用于 Qt 6.6。也许有人可以解释这个逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.