keine Idee, es zu tun? Stellen Sie sich vor, wir haben eine lange Listenansicht und wir werden nur das Bild der sichtbaren Elemente herunterladen (d. H. Elemente, die auf dem Bildschirm sichtbar sind)herunterladen Bilder nur beim Scrollen von Elementen in einer QML-ListView oder Gridview
0
A
Antwort
0
Delegierte in einer Ansicht sind created as needed; das heißt, wenn sie in Sicht kommen.
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 + "...");
}
}
}
}
}
Dies setzt voraus, dass die Delegierten sind quadratisch, und die gleiche Größe haben wie: Doch die visible
Eigenschaft ist standardmäßig wahr, so zu überprüfen, ob ein Element tatsächlich sichtbar ist, können Sie die Verwendung von currentIndex und contentY machen die Aussicht selbst; Bei diesem Ansatz zählt jedoch nur die Höhe der Ansicht und der Delegierten.
0
Vielen Dank Mitch. Ihr Code ist in Ordnung, aber leider „Momentanindex“ von Listview jedes Mal, weniger die Glätte des Scrollens behaviour.I diesen Code in meinem Delegaten verwenden, um jetzt zu ändern, und es ist nicht schlecht, vielleicht schreibe ich einen besseren Ansatz später:
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
}
}
Danke für deine Antwort Mitch. es ist toll, aber ich werde auch Bilder herunterladen. Ich mache etwas in der Art: 'Component.onCompleted: { if (! FileExists ("data /" + imgPath)) { downloadImg (imgPath) } } es funktioniert auch richtig, aber ich mag nur' sichtbare Elemente 'herunterladen und nicht im "onComplete" -Signal. (Ich benutze cacheBuffer auch für reibungsloses Scrollen) ist es möglich? – Musa