QT QML如何滚动回到ListView标头



如果我在列表视图中选择一个项目,我希望列表在一个简短的动画中滚动以将当前选择的项目放在列表的顶部,并移动标题向上,看不到。它可以与以下代码一起使用。但是,当我想向下滚动以再次查看列表标头时,它总是回到列表的顶部(第一项(。这很可能是由highlightRangeMode: ListView.StrictlyEnforceRange引起的。但是我如何避免这种情况?

我尝试了highlightRangeMode: ListView.ApplyRange,它让我再次滚动到标题,但这导致项目通常不会移至顶部,而这是不可接受的。我尝试了headerPositioning: ListView.PullBackHeader,但这给了我相同的结果,例如headerPositioning: ListView.PullBackHeader

ListView {
    id: list
    anchors.fill: parent
    clip: true
    spacing: 11
    focus: true
    highlightMoveDuration: 400
    snapMode: ListView.SnapToItem
    preferredHighlightBegin: 0
    preferredHighlightEnd: 100
    highlightRangeMode: ListView.StrictlyEnforceRange
    headerPositioning: ListView.InlineHeader
    header: Rectangle {
                id: headerBar
                height: 116
                color: "blue"
                anchors {
                    left: parent.left
                    right: parent.right
                    leftMargin: 12
                    rightMargin: 12
                }
            }
    model: myModel
    delegate: ListItem {
                  height: 56
                  width: list.width
                  color: "red"
                  onListItemClicked: {
                      list.currentIndex = index
                  }
              }
}

我希望ListView中的所选项目始终滚动到列表的顶部(在preferredHighlightBeginpreferredHighlightEnd内部(,并且我可以手动向下滚动以查看ListView标头。有人知道解决方案吗?

我看不到如何在qml scrollview中进行动画滚动的解决方案?由于我不想使用滚动条。

您只能在单击时应用严格的范围并在之后删除它以允许光滑的鼠标滚动:

ListView {
    // ....
    highlightRangeMode: ListView.NoHighlightRange
    delegate: ListItem {
        // ...
        onListItemClicked: {
            list.highlightRangeMode = ListView.StrictlyEnforceRange
            list.currentIndex = index
            list.highlightRangeMode = ListView.ApplyRange
        }
    }
}

相关内容

  • 没有找到相关文章