Planned maintenance: From Sunday 8th December 10:00 CET there will be changes to try and solve the caching issues that have been experienced. If anyone has a problem connecting after this period then please PM @AndyS or any of the moderators.

Gridview mit Delegate aus Model füllen



  • Hallo,

    ich versuche gerade ein GridView mit Component (Rectangle mit Beschriftungen) zu füllen. Das ganze wird über ein QAbstractListModel mit Objekten gefüllt.

    Das klappt soweit auch ganz gut und es wird für jedes Objekt im Model ein Component erstellt, nur schaffe ich es scheinbar nicht an die Variablen in den Objekten (z.B. Name des Objekts als String) usw. ran zu kommen.

    Im TableView nutze ich ja

    view.model.get(row).lenght
    

    beispielsweise wenn ich vom model des TableView view per get den Index hole und dann das Attribut (hier die Länge) für die row die ich angeklickt habe.

    Oder bei einem TableView fülle ich per

    TableViewColumn {
                    role: 'lenght'
                    title: "Länge"
                }
    

    die Spalten mit den densprechenden Werten.

    Aber wie übergebe ich das dem Component das er jeweils die Werte für das aktuelle Objekt zieht beim generieren?



  • Hallo,

    nach langem testen und probieren habe ich es selbst gefunden.

    Wenn jemand auch das Problem hat, die Syntax für die Components die den Grid füllen sollen lautet dann:

    view.model.get(this, 0).lenght
    

    view = der view (in meinem Fall Gridview)
    model = das Model das den View füllen soll (bei mir ein QAbstractListModel)
    get = selbst definierte Funktion im Model die die QVariantMap mit den Daten der entsprechenden Role zurück liefert
    (this, 0) = Daten von aktuellem Element (this), Spalte 0, weil Listmodel mit nur eine Spalte in der die Objekte mit den Daten liegen
    lenght = der Parameter der zurück geliefert werden soll



  • Hallo nochmal,

    nach intensiveren Tests mit großen Datenmengen musste ich feststellen das die obere Lösung scheinbar manchmal willkürlich Datensätze durcheinander bringt (leider konnte ich noch nicht genau nachvollziehen was genau das auslöst, ich tippe auf eine Konstellation im Model, da arbeitet ich noch dran ;)

    Die alternative Lösung die sauber funktioniert (Quelle im Text unter dem Beispiel):
    http://qt-project.org/doc/qt-5/qtquick-modelviewsdata-modelview.html#qml-data-models

    in der Definition des Component eine int Property definieren und mit dem Index des Elements bei der Erstellung füllen um extern darauf zuzugreifen.

    property int indexOfThisDelegate: index
    

    und sich dann bei der Auswertung und den Daten die ausgewertet werden sollen auf diesen Index beziehen:

    view.model.get(index, 0).lenght
    

    Vielleicht hilft das ja jemandem :)


Log in to reply