Solved Gridview mit Delegate aus Model füllen
-
Hallo,
ich versuche gerade ein
GridView
mitComponent
(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 dierow
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
), Spalte0
, 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-modelsin 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 :)