qt - 如何将 ListView 滚动到当前项目?

标签 qt qml qtquick2

我有一个 ListView 。如果我单击一个单元格,该特定单元格需要通过一个小的滚动动画移动到中心。使用我的代码,单击的单元格将在没有任何动画的情况下到达中心。

是否可以为此添加动画?

我把我的代码放在下面:

    ListView {
        id: source_list
        width: 1080
        height: 480
        spacing: 50
        model: mediaSongsModel
        delegate: mediaSongsDelegate
        focus: true
        interactive: true
        clip: true
        highlightMoveDuration: 50
        snapMode: ListView.SnapToItem
        boundsBehavior:Flickable.StopAtBounds
        preferredHighlightBegin: 260/scaleFactor
        preferredHighlightEnd: 260/scaleFactor
        highlightRangeMode: ListView.StrictlyEnforceRange
    }                

    Component {
        id: mediaSongsDelegate
        Item {
            id: wrapper
            width: 1080
            height: 200

            MouseArea {
                anchors.fill: parent
                onClicked: {
                    source_list.currentIndex = index
                    source_list.positionViewAtIndex(index,ListView.Center)    
                }
            }           
        }
    }

最佳答案

如果当前项应始终位于 View 的中心或特定区域内,则可以使用 preferredHighlightBeginpreferredHightlightEnd 属性来定义该区域。
highlightRangeMode 的值控制如果是,如果是,这适用的严格程度。例如。如果第一个项目是当前项目并且值为 StriclyEnforeRange 则该项目将在指定区域内,即使这意味着比正常的“滚动到顶部”滚动得更远。

这样的事情应该工作

ListView {
    preferredHighlightBegin: height / 2 - 100 // 100 being item height / 2
    preferredHighlightEnd: height / 2 + 100 // 100 being item height / 2
    highlightRangeMode: ListView.StrictlyEnforceRange
}

关于qt - 如何将 ListView 滚动到当前项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40818593/

相关文章:

qt - 动态添加小部件到 gridLayout Qt

c++ - 什么是 castable QML WebView?

qt - 如何在 QtControls 2.0 中为 SpinBox 设置对齐方式?

qt - 在运行时将 QML Dialog 嵌入到 QDialog 窗口中

qml - QML中的图像圆角

qt - 如何关闭模态窗口的非模态子窗口?

css - QTableWidget 和 QHeaderView CSS

c++ - QTimer 与扩展 QThread 无关

qt - TreeView - 如何使用角色作为图像源

qt - QML 鼠标区域 : onExited doesn't trigger after programmatically moving mouse into MouseArea