如何在 QML ScrollView 中设置滚动动画?
How to animate scroll in a QML ScrollView?
如何在 QML ScrollView 中设置滚动动画?
我已经在 contentItem.contentY
上尝试了 Behavior
,但它不起作用。
使用 Qt Quick Controls 1
您只需为 属性 flickableItem.contentY
上的值变化设置动画。
一个简单的例子:
Item {
anchors.fill: parent
ColumnLayout {
anchors.fill: parent
Button {
id: btn
onClicked: scroll.scrollTo(scroll.flickableItem.contentY + 100)
}
ScrollView {
id: scroll
function scrollTo(y) {
scrollAnimation.to = y
scrollAnimation.start()
}
NumberAnimation on flickableItem.contentY {
id: scrollAnimation
duration: 1000
}
contentItem: Column {
Repeater {
model: 30
Rectangle {
width: 100; height: 40
border.width: 1
color: "yellow"
}
}
}
}
}
}
当您点击按钮时,它会平滑地滚动 100 像素。
使用 Qt Quick Controls 2
flickableItem.contentY
不再可用。在 Qt Quick Controls 2 中做同样事情的最简单方法是动画化 ScrollBar
.
的位置
注意 QScrollBar
的位置是百分比(表示在 0 和 1 之间),而不是像素。
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
ScrollView {
id: scroll
width: 200
height: 200
clip: true
function scrollTo(y) {
scrollAnimation.to = y
scrollAnimation.start()
}
ScrollBar.vertical: ScrollBar {
id: test
parent: scroll
x: scroll.mirrored ? 0 : scroll.width - width
y: scroll.topPadding
height: scroll.availableHeight
active: scroll.ScrollBar.horizontal.active
policy: ScrollBar.AlwaysOn
NumberAnimation on position {
id: scrollAnimation
duration: 1000
}
}
ListView {
model: 20
delegate: ItemDelegate {
text: "Item " + index
}
}
}
Button {
id: btn
anchors.top: scroll.bottom
onClicked: scroll.scrollTo(test.position + 0.1)
}
}
当您点击按钮时,它会滚动高度的 10%。
如何在 QML ScrollView 中设置滚动动画?
我已经在 contentItem.contentY
上尝试了 Behavior
,但它不起作用。
使用 Qt Quick Controls 1
您只需为 属性 flickableItem.contentY
上的值变化设置动画。
一个简单的例子:
Item {
anchors.fill: parent
ColumnLayout {
anchors.fill: parent
Button {
id: btn
onClicked: scroll.scrollTo(scroll.flickableItem.contentY + 100)
}
ScrollView {
id: scroll
function scrollTo(y) {
scrollAnimation.to = y
scrollAnimation.start()
}
NumberAnimation on flickableItem.contentY {
id: scrollAnimation
duration: 1000
}
contentItem: Column {
Repeater {
model: 30
Rectangle {
width: 100; height: 40
border.width: 1
color: "yellow"
}
}
}
}
}
}
当您点击按钮时,它会平滑地滚动 100 像素。
使用 Qt Quick Controls 2
flickableItem.contentY
不再可用。在 Qt Quick Controls 2 中做同样事情的最简单方法是动画化 ScrollBar
.
注意 QScrollBar
的位置是百分比(表示在 0 和 1 之间),而不是像素。
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
ScrollView {
id: scroll
width: 200
height: 200
clip: true
function scrollTo(y) {
scrollAnimation.to = y
scrollAnimation.start()
}
ScrollBar.vertical: ScrollBar {
id: test
parent: scroll
x: scroll.mirrored ? 0 : scroll.width - width
y: scroll.topPadding
height: scroll.availableHeight
active: scroll.ScrollBar.horizontal.active
policy: ScrollBar.AlwaysOn
NumberAnimation on position {
id: scrollAnimation
duration: 1000
}
}
ListView {
model: 20
delegate: ItemDelegate {
text: "Item " + index
}
}
}
Button {
id: btn
anchors.top: scroll.bottom
onClicked: scroll.scrollTo(test.position + 0.1)
}
}
当您点击按钮时,它会滚动高度的 10%。