Qt-Modell-Baum-Ansicht und Tabellen-Ansicht

Habe ich eine Liste von Product-Objekten ( als Zeilen ), jedes Objekt hat mehrere Datenfelder ( wie Produkt-id, Produkt, Familie, etc ) - als Spalten. Ich es geschafft, eine Tabelle erstellen, Modell Unterklassen QAbstractTableModel, und die Anzeige der Daten in einem QTableView.

Was ich will, ist eine "gruppierte" Ansicht des Modells, die in einer baumartigen Struktur. Zum Beispiel möchte ich die Gruppe der Produkte, die von Ihrer Familie id, so sollte der Baum enthält in der ersten Ebene der Gruppen ( family id ) und Ihre Kinder sind das Produkt, dass die Familie id.

Irgendwelche Ideen?

PS:
Die Notwendigkeit von mehreren Gruppierungen ( group by-Familie-id, und gruppieren Sie Sie durch eine andere Spalte, und so weiter ) die mir zeigt, dass das Modell sollte ein Baum sein. Der root-Knoten gibt die Gruppen und dann die childs sind die Mitglieder der Gruppe. Die mehrfache Gruppierung kann erreicht werden, indem multi-level-Bäume.

Dann meine transformiert Frage ist folgende: Wie kann ich die implementieren eine spezielle Klasse QTableView, die zeigt nur der Baum die Blätter ( auf einer bestimmten Ebene )? ( Denn eigentlich Blätter sind die realen Objekte, die wir würde gerne sehen, in einem Gitter )

Kann ich verwenden setRootIndex in der tableview, aber es ist für nichts eine Lösung, andere Blätter werden nicht angezeigt.

Drang ich ein wenig und fand heraus, dass in QTableView::paintEvent, beim anzeigen jeder Zeile und Spalte, der eigentliche Punkt ist geholt wie :

const QModelIndex index = d->model->index(row, col, d->root);

wo d->root() ist der root-Knoten gegeben durch setRootIndex(). Dies sollte eingebettet sein in eine Baum-traversal-code, und alles wäre in Ordnung. Aber wie könnte ich es vermeiden, implementieren Sie die ganze paintEvent-Methode ?

  • Wollt Ihr immer, dass Sie gruppiert die gleiche Weise (wie in der, von der Familie-id), oder wollen Sie die Gruppierung zu ändern, wenn Sie die Sortierreihenfolge ändern? Das erste sollte ziemlich einfach sein, die zweite nicht so viel.
  • Habe ich eine einfache Baum-Modell, und legen Sie es für verschiedene Ansichten. Das Beispiel unten zeigt, wie ich möchte sehen, wie die Baum-Ansicht, aber in der Tabelle würde ich die Produkte, nicht die Familien. Wie kann ich einstellen, dass die Tabelle-Ansicht sieht die zweite Ebene Knoten des Modells? Der code kann hier gefunden werden : stud.u-szeged.hu/Veress.Krisztian/main.cpp
  • wenn Sie buchen Sie Ihren code hier ein, es wird durchsuchbar und für alle zu sehen
InformationsquelleAutor | 2009-08-30
Schreibe einen Kommentar