有什么想法吗?想象一下,我们有一个很长的列表视图,我们将只下载可见项目的图像。(即屏幕上可见的项目)
视图中的
委托是根据需要创建的;也就是说,当它们进入视图时。但是,默认情况下 visible
属性为 true,因此要检查项目是否实际可见,您可以使用 currentIndex 和 contentY:
import QtQuick 2.6
import QtQuick.Window 2.2
Window {
width: 600
height: 600
visible: true
ListView {
id: listView
width: 200
height: 200
anchors.centerIn: parent
model: 50
onContentYChanged: currentIndex = contentY / height
delegate: Image {
width: listView.width
height: width
source: "http://www.blah.com/image" + index + ".png"
fillMode: Image.PreserveAspectFit
ListView.onIsCurrentItemChanged: {
if (ListView.isCurrentItem) {
print("Downloading image at index " + index + "...");
}
}
}
}
}
这假定委托是正方形的,并且与视图本身的大小相同;尽管使用这种方法,真正重要的是视图和委托的高度。
非常感谢米奇。 您的代码还可以,但不幸的是每次都更改Listview的"currentIndex",而不是滚动行为的流畅性。我现在在我的委托中使用此代码,它还不错,也许我稍后会写一个更好的方法:
property bool isVisible : ((y > GridView.view.contentY) && y < (GridView.view.contentY + GridView.view.height))
onIsVisibleChanged: {
if (isVisible && !exists("data/"+ImgPath)){
print("Downloading image at index " + index + "...")
isVisible = false
}
}