QTreeView, QAbstractItemModel - Denkanstöße gesucht
-
Hallo zusammen,
nachdem ich jetzt den Einstieg in MVC einigermaßen geschafft habe und schon drei Models erfolgreich umgesetzt habe, stehe ich jetzt wieder wie der Ochs vor'm Berg.
Und zwar möchte ich dieses Mal ein QTreeView verwenden und komme mit den mir zur Verfügung stehenden Mitteln (Buch, Docs, Tutorials...) ganz und garnicht mehr weiter.Im Prinzip ist mein Problem ziemlich simpel, ich möchte ein QTreeView mit vielen verschiedenen Spalten haben. Die Spalten habe ich hinbekommen, die "funktionieren" schon super ;)
1.) Ich bekomme eine Liste von GruppenIDs, die ich jeweils als 1. Ebene anlegen möchte.
2.) Ich bekomme eine Liste mit MemberIDs, die ich den GruppenIDs als Child zuordnen möchte (also zweite Ebene)
3.) Ich bekomme eine weitere Liste, mit der ich dann wieder einen Satz IDs bekomme (3. Ebene), die ich den Members wiederrum als Child zuordnen möchte.@
- Gruppe1
|__ Member1
| |______ Element 1: Wert 1 | Wert 2 | Wert 3 ...
| |______ Element 2: Wert 1 | Wert 2 | Wert 3 ...
|
|__ Member2 - Gruppe2
- Gruppe3
|__ Member1
...
@
Bisher habe ich nur versucht den ersten Schritt zu realisieren. Allerdings ist es momentan so, dass ich nur eine leere Zeile angezeigt bekomme ohne jegliche Werte, anstatt 30 "angelegte Reihen" inklusive IDs.
Ich habe mich mit diesem Beispiel: http://qt-project.org/doc/qt-4.8/itemviews-simpletreemodel.html versucht durchzuhangeln, aber irgendwas scheint da bei mir nicht zu passen. Allerdings steige ich bei dem Beispiel auch nicht komplett durch...ein paar Sache sind mir da ziemlich unklar.
In der QList "parents" stehen am Schluss von der Schleife 31 Elemente drin, das 1. ist die Kopfzeile dann kommen meine 30 angelegten Objekte. In ItemData steht auch die ID richtig drin, aber trotz allem scheint irgendwas nicht zu passen.Was ich mich frage: In meinen anderen Models lege ich Klasseninstanzen an und lege diese in einer QList ab. Die vorhandenen, funktionierenden Models kann ich mit dem TreeView verbinden und es wird als eine Art Tabelle angezeigt, ohne Einrückungen - klar, da gibt es keine Abhängigkeiten. Kann ich diese Models irgendwie anpassen, damit es möglich wird?
Denkanstöße bitte!!! ;)
//Wobei ich sagen muss, dass beim Aufschreiben des Problems hier mir doch noch einiges klar(er) geworden ist. - Gruppe1
-
Hi,
ich verstehe das Problem noch nicht ganz:
Du hats ein Tree model und darin eine Liste von tree items.
da Tree items caskadiert sein können und ein QModelIndex möglichst schnell auf ein element zugreifen können sollte, macht es sinn in der Liste pointer auf Heap objekte zu verwalten, um diese verzeigern zu können.
Ein ModelIndex hat immer (im private data) einen pointer of das entsprechende Tree Item
In der Methode data() holst du dir den Pointer und gibst die daten aus
Es ist zwingend wichtig bei rowCount / columnCount auf das parent item zu achten.
Was genau sind jetzt deine Beobachtungen bei deinem Problem?
Kannst du uns source geben, damit wir mal reinschauen können? -
Ähm okay, ich bin deutlich weiter als gestern:
Das Model sieht soweit ganz gut aus: die Kopfzeile ist das Parent (mit 0 als Parent) und darunter als Child Items die angelegten Gruppen mit der Kopfzeile als Parent, müsste soweit also von den Pointern alles passen.Komischerweise wird laut Debugger die data() Methode jetzt garnicht mehr aufgerufen. Das war gestern definitiv noch der Fall. Irgendwie wird das View nicht automatisch geupdated. Wenn ich ein beginInsertRows() und endInsertRows() einhänge, funktioniert es! Gibt es dafür eine elegante Lösung? ;)
-
naja, wenn das model initial nicht gefüllt ist, musst du immer irgendwas richting begin/end-insert oder resetModel machen.
Oder das model hat schon alle daten, wenn du das model in die view einhängst.Ansonsten müsstest du mal den code irgendwo hinbstellen als minimal beispiel, dann kann ich mal reinschauen, ob ich was sehe.
-
Mir war nicht ganz klar, wer der Parent von wem sein muss. Aber nachdem ich mir im Debugger nochmal das Tutorial angeschaut habe, war's dann klar. Ich werde mich wahrscheinlich nochmal melden, sobald ich weitergekommen bin und vor den nächsten Problemen stehe. Ich denke ich werde das Model für meine Zwecke auch noch etwas anpassen, wichtig war erstmal überhaupt etwas angezeigt zu bekommen. Die erste Ebene passt soweit jetzt auch.
Du hast natürlich Recht, das Model ist nicht initial gefüllt, hätte mir auch klar sein müssen, eigentlich. Arbeite an einem Client/Server Projekt und mein Client bekommt erst während der Laufzeit vom Server die Liste mit den verschiedenen IDs geschickt...
Danke für die Hilfe, die nächsten Fragen kommen bestimmt demnächst ;)