对于无法提供工作示例提前表示歉意。
我有一个 QML Flickable,其组件是一个中继器,可生成一列垂直的单选按钮。 我了解 Flickable 的默认行为是将其滚动条位置设置为零。 我想做的是以编程方式向下滚动到当前选中的单选按钮。 问题是,每次我将 ScrollBar.position 或属性 Flickable.contentY 设置为除零以外的任何值时,它都会立即设置回零。
初始化完成后,我可以通过编程方式控制滚动条,没有问题。 然而,这不是我需要的。
我尝试通过在回调 Component.onCompleted 中为可轻拂、滚动条、父级和父级的父级设置位置/contentY 值来移动 ScrollBar,但没有成功。 下面基本上是我如何设置 Flickable 的。 再次,我很抱歉无法提供有效的示例。
Rectangle
{
anchors.fill: parent
property var fileNames: []
onFileNamesChanged:
{
repeater.model = fileNames
}
Flickable
{
id: flickable
anchors.fill: parent
clip: true
ScrollBar.veritical: ScrollBar
{
parent: flickable.parent
anchors.top: flickable.top
anchors.left: flickable.left
anchors.bottom: flickable.bottom
anchors.leftMargin: 4
contentItem: Rectangle
{
radius: 5
implicitWidth: 5
color: "grey"
}
}
Column
{
id: flickableColumn
width: parent.width
spacing: 5
Repeater
{
id: repeater
delegate: Column
{
id: delegateColumn
width: flickableColumn.width
spacing: flickableColumn.spacing
RadioButton {/** some stuff **/}
Rectangle{/** set up as a divider bar **/}
}
}
}
}
我在 ScrollBar 的 onPositionChanged 回调中设置了一个 console.log 命令。 最后两个日志是: 更改滚动条位置 0.18181818181818183 // <-- Correct position
更改滚动条位置 0
一些改进:
Qt.CallLater
与 Component.onCompleted 结合使用以实现延迟初始化 Frame {
anchors.fill: parent
ListView {
id: listView
anchors.fill: parent
model: "abcdefghijklmopqrstuvwxyz".split("").map(ch => `filename-${ch}.txt`)
clip: true
delegate: ItemDelegate { text: modelData }
ScrollBar.vertical: ScrollBar { width: 20; policy: ScrollBar.AlwaysOn }
Component.onCompleted: Qt.callLater( () => contentY = 50 )
}
}
您可以在线尝试!