Konfigurationsdaten in QTreeView darstellen und editieren
Verfasst: 16. September 2014 19:47
Hallo,
ich möchte gerne Konfigurationsdaten, die in einer XML-Datei gespeichert sind, in einer einer Oberfläche editieren.
Die Konfigurationsdaten sind hierarchisch aufgebaut, es gibt Module, die wiederum untergeordnete Module haben können. Die Module haben zusätzlich auch Eigenschaften, die ebenfalls editierbar sein müssen. Diese Eigenschaften haben jeweils einen Namen und einen Wert.
Ich hab mir das so vorgestellt, dass in der Ansicht auf der linken Seite eine Baumansicht (QTreeView) mit allen Modulen dargestellt wird. Wenn man jetzt ein Modul auswählt, sollen rechts davon alle Eigenschaften aufgelistet werden, jeweils mit Namen und Wert. Die Werte sollen editierbar sein, die Namen nicht.
Dazu jetzt meine Frage(n):
Ist es möglich bzw. sinnvoll, die Module mit allen Werten in einem Daten-Modell (QStandardItemModel) abzulegen oder ist es besser, nur die Modul-Hierarchie so zu implementieren und für die Eigenschaften für jedes Modul jeweils separate Tabellen zu benutzen? Oder sollte ich für die Eigenschaften statt einer Tabelle einen Dialog dynamisch erstellen mit Labels und Eingabefeldern?
Ich hab es erst mal so versucht:
- Jedes Modul ist ein QStandardItem (nur eine Spalte)
- Für jede Eigenschaft hänge ich an das entsprechende Modul eine Zeile mit zwei Spalten an; in der ersten Spalte steht der Name und in der zweiten Spalte der Wert für die Eigenschaft.
Damit kann ich dann die Module mit der QTreeView darstellen und wenn ich eines auswähle, werden daneben in einer QTableView die Werte für das entsprechende Modul dargestellt. Allerdings erscheinen dann auch die Namen der Eigenschaften als eigene Elemnte in der TreeView, was ich nicht möchte.
Gibt es eine Möglichkleit, in der TreeView nur die Module darzustellen und nicht die Modul-Eigenschaften? Ist es sinnvoll, das mit einem Proxy Model zu machen, das z.B. alle Zeilen herausfiltert, die nur aus einer Spalte bestehen?
So eine Aufgabenstellung gibt es doch bestimmt bei vielen Projekten. Ich würde mich freuen, wenn mir da jemand einen Tipp geben könnte, wie man so etwas am besten macht.
ich möchte gerne Konfigurationsdaten, die in einer XML-Datei gespeichert sind, in einer einer Oberfläche editieren.
Die Konfigurationsdaten sind hierarchisch aufgebaut, es gibt Module, die wiederum untergeordnete Module haben können. Die Module haben zusätzlich auch Eigenschaften, die ebenfalls editierbar sein müssen. Diese Eigenschaften haben jeweils einen Namen und einen Wert.
Ich hab mir das so vorgestellt, dass in der Ansicht auf der linken Seite eine Baumansicht (QTreeView) mit allen Modulen dargestellt wird. Wenn man jetzt ein Modul auswählt, sollen rechts davon alle Eigenschaften aufgelistet werden, jeweils mit Namen und Wert. Die Werte sollen editierbar sein, die Namen nicht.
Dazu jetzt meine Frage(n):
Ist es möglich bzw. sinnvoll, die Module mit allen Werten in einem Daten-Modell (QStandardItemModel) abzulegen oder ist es besser, nur die Modul-Hierarchie so zu implementieren und für die Eigenschaften für jedes Modul jeweils separate Tabellen zu benutzen? Oder sollte ich für die Eigenschaften statt einer Tabelle einen Dialog dynamisch erstellen mit Labels und Eingabefeldern?
Ich hab es erst mal so versucht:
- Jedes Modul ist ein QStandardItem (nur eine Spalte)
- Für jede Eigenschaft hänge ich an das entsprechende Modul eine Zeile mit zwei Spalten an; in der ersten Spalte steht der Name und in der zweiten Spalte der Wert für die Eigenschaft.
Damit kann ich dann die Module mit der QTreeView darstellen und wenn ich eines auswähle, werden daneben in einer QTableView die Werte für das entsprechende Modul dargestellt. Allerdings erscheinen dann auch die Namen der Eigenschaften als eigene Elemnte in der TreeView, was ich nicht möchte.
Gibt es eine Möglichkleit, in der TreeView nur die Module darzustellen und nicht die Modul-Eigenschaften? Ist es sinnvoll, das mit einem Proxy Model zu machen, das z.B. alle Zeilen herausfiltert, die nur aus einer Spalte bestehen?
So eine Aufgabenstellung gibt es doch bestimmt bei vielen Projekten. Ich würde mich freuen, wenn mir da jemand einen Tipp geben könnte, wie man so etwas am besten macht.