只需在QML listView或gridview中滚动项目时下载图像

时间:2016-04-24 11:47:38

标签: qt listview qml

这样做的任何想法?想象一下,我们有一个很长的列表视图,我们将只下载可见项目的图像(即屏幕上可见的项目)

2 个答案:

答案 0 :(得分:0)

观点中的代表是created as needed;也就是说,当他们进入视野时。但是,默认情况下visible属性为true,因此要检查项目是否实际可见,您可以使用currentIndexcontentY

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 + "...");
                }
            }
        }
    }
}

这假设代表是方形的,并且与视图本身的大小相同;虽然,使用这种方法,所有真正重要的是视图和代表的高度。

答案 1 :(得分:0)

非常感谢Mitch。你的代码还可以,但遗憾的是每次改变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
    }
}