Model/View SQLTable nach TreeView

Alles rund um die Programmierung mit Qt
Antworten
otternase
Beiträge: 62
Registriert: 25. Januar 2008 12:20

Model/View SQLTable nach TreeView

Beitrag von otternase »

Hallo

folgende Aufgabenstellung:
ich habe eine SQL-Tabelle bestehend aus einer Primary-Key-Spalte und mehreren weiteren Spalten.
Die SQLTable kann ich ja problemlos in ein SQLTableModel einlesen und in einem TableView darstellen.
Aber die Aufgabe ist es nun, die Tabelle in einem TreeView darzustellen gruppiert nach Spalten.

Beispiel:

Tabelle "Obst"

Code: Alles auswählen

id (PK) | Sorte | Farbe
----------------------------
1| Apfel | rot
2| Apfel | grün
3| Birne | rot
4| Birne | grün
View soll wahlweise zeigen:

Code: Alles auswählen

(root)
 - Apfel
    - rot    1
    - grün  2
 - Birne
    - rot    3
    - grün 4
oder

Code: Alles auswählen

(root)
 - rot
   - Apfel  1
   - Birne  3
 - grün
   - Apfel  2
   - Birne  4
Bei Anklicken eines Elementes der tiefsten Ebene soll der Primary Key der entsprechenden Zeile zurückgegeben werden, bei Editieren eines solchen Items die entsprechende Zeile im Model (und damit in der Datenbank) geändert werden. Wird hingegen eine Ebene mit child-nodes angeklickt, sollen alle Primary Keys der childs ausgegeben werden, wird dieser node editiert, sollen alle child-Zeilen entsprechend geändert werden. (wenn also in letzterem Beispiel 'rot' auf 'red' geändert wird, sollen beide Zeilen entsprechend geändert werden. Entsprechend soll bei Löschen eines Items vorgegangen werden, also Löschen eines Items der tiefsten Ebene führt zu Löschen dieser Zeile, Löschen eines Items einer höheren Ebene zum Löschen einer Gruppe von Zeilen.
Welche Spalte Primary Key ist und in welcher Reihenfolge gruppiert werden soll, diese Information liegt in einer QStringList der Spaltenüberschriften (erstes Listenelement ist PK, danach soll in Reihenfolge der Listenelemente gruppiert werden...)

Ich vermute, dass ich dafür ein QProxyModel einsetzen muss? Oder gibt es andere Vorschläge?

Die Aufgabe scheint mir so "originell" nicht zu sein, auch wenn ich in der Doku nichts vergleichbares fand, gibt es irgendwo ein Programmbeispiel, bei dem man sich was dazu abgucken kann?

Danke
Markus
Antworten