2016-04-24 8 views

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

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

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 
    } 
}