Qt QML Как прокрутить назад до заголовка ListView? - PullRequest
0 голосов
/ 24 июня 2019

Если я выбираю элемент в моем 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 всегда прокручиваются к началу списка (внутри preferredHighlightBegin и preferredHighlightEnd) и что я могу прокрутить вручную вниз, чтобы увидеть заголовок ListView.Кто-нибудь знает решение?

Я не вижу решения в Как я могу анимировать прокрутку в QML ScrollView? , так как я не хочу использовать полосу прокрутки.

1 Ответ

1 голос
/ 24 июня 2019

Вы можете применить строгий диапазон только к нажатию и удалить его после, чтобы обеспечить плавную прокрутку мыши:

ListView {
    // ....
    highlightRangeMode: ListView.NoHighlightRange

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