在 QML 列表视图或网格视图中滚动项目时下载图像



有什么想法吗?想象一下,我们有一个很长的列表视图,我们将只下载可见项目的图像。(即屏幕上可见的项目)

视图中的

委托是根据需要创建的;也就是说,当它们进入视图时。但是,默认情况下 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
    }
}

相关内容

  • 没有找到相关文章

最新更新