我想在QML ScrollView的滚动结束时做一些事情。从文档中我假设flickableItem.onMovementEnded是我正在寻找但我永远不会得到那个信号。我理解"运动"错误? 我写了这个最小的QML应用程序,我的console.log从未调用过。我在Qt 5.7或5.5.1的Mac上运行它。
import QtQuick 2.5
import QtQuick.Controls 1.4
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
ScrollView {
id: scrollView
anchors.fill: parent
flickableItem.onMovementEnded: {
console.log("onMovementEnded")
}
Rectangle {
id: rect
width: 3000
height: 3000
}
}
}
我还试图通过" Connections"没有运气。
Connections {
target: scrollView.flickableItem
onMovementEnded: {
console.log("onMovementEnded")
}
}
答案 0 :(得分:2)
来自文档:
ScrollView可用于替换Flickable或装饰 现有的Flickable。
...
flickableItem:项目
ScrollView的flickableItem。如果提供了contentItem ScrollView是一个Flickable,它将是contentItem。
听起来我只有在滚动视图与flickableItem
一起使用时才会填充Flickable
属性。在你的代码中它不是。
Flickable
,该物业就在那里,但如果你有{strong>那么信号只会 Flickable
内的实际ScrollView
,当您从上到下快速滚动或使用鼠标滚轮向后滚动时,它将仅,轻弹赢了&#39这样做,使用滚动条不会做到这一点。不理想,有点儿车......
似乎你真正想要的只是使用Flickable
并在其上放置手动滚动条,有很多例子如何做到这一点。然后它会在停止时发出。
答案 1 :(得分:0)
基于@ddriver的输入,我使用 onContentYChanged 和一个Timer构建了一个解决方案。这对我来说已经足够了,尽管它并不完美。
import QtQuick 2.5
import QtQuick.Controls 1.4
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
ScrollView {
id: scrollView
anchors.fill: parent
flickableItem.onContentXChanged: {
updateContentDelay.restart()
}
flickableItem.onContentYChanged: {
updateContentDelay.restart()
}
Rectangle {
id: rect
width: 3000
height: 3000
}
}
Timer {
id: updateContentDelay
interval: 200
repeat: false
onTriggered: {
console.log("do something")
}
}
}