Aufbauen von mehreren Qtrees aus einer QTreeWidgetItemListe

Alles rund um die Programmierung mit Qt
Antworten
qrk123
Beiträge: 32
Registriert: 4. Dezember 2009 13:19

Aufbauen von mehreren Qtrees aus einer QTreeWidgetItemListe

Beitrag von qrk123 »

Hallo,

Ich habe ein Menü, das aus 5 Bäumen besteht. In allen Bäumen kann man aus einer großen Liste Items auswählen, die man mit einem Haken markiert.
Nun soll es einen weiteren Baum geben, der mir nur die ausgewählten Elemente des jeweils aktuellen Baumes anzeigt.

Mein Ansatz war folgender, ich habe 5 Listen, die jeweils die TopLevelItems der unteren Menübäume enthalten. Wenn sich der aktuelle Auswahlbaum ändert, dann ändert sich auch der Baum, der mir dessen Auswahl zusammenfasst.
In dem Fall nehme ich meine Liste fülle sie in den leeren Baum und hänge dann nur die im anderen Baum markierten Elemente neu hinein.
Wenn sich die Auswahl des Baumes ändert, wird der erstellte Baum gelöscht und ich nehme wieder meine TopLevelItemsListe her um ihn erneut zu befüllen.

Problem ist, dass sich in dem Baum, der mir die Auswahl zusammenfasst nur Referenzen befinden, die sich also beim clearen des Baumes löschen und anschließend beim zweiten Versuch den Baum zu füllen eine Nullpointer Exeption hervorrufen, da meine anderen Listen leer sind.

Gibt es eine geschickte Art dieses Problem zu lösen ohne ständig massenweise neue Objekte zu erstellen und zu kopieren?

vielen Dank
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Nimm das QSortFilterProxyModel und filtere nach den Selektionen.
qrk123
Beiträge: 32
Registriert: 4. Dezember 2009 13:19

Beitrag von qrk123 »

Hallo,

hab mir die doku da gerade mal zu angesehen. So ein Filter wird leider schwierig, da ich im Moment nicht mit Models arbeite, sondern alles dynamisch aus QWidgetItems aufbaue, da Models wohl nicht so dynamisch sind.
Ein weiteres Probem ist, dass ich nciht verstehe wie ich die abfrage nach dem checked stats in meinen Filter hinein bekomme. In der Doku finde ich leider nur ein Beispiel mit regular expressions.
Wäre schon ideal wenn ich nicht alles auf models umstellen müsste.

Danke
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Das QTreeWidget mit dem du arbeitest hat doch ein Model, mit dem man arbeiten kann. Die QTreeWidgetItems sind Items davon.

bool MySortFilterProxyModel::filterAcceptsRow ( int source_row, const QModelIndex & source_parent ) const {
return source_parent.data(Qt::CheckStateRole).toInt()==Checked;
}

Du solltest dich mal mehr mit den MVC-Konzept von Qt beschäftigen.
qrk123
Beiträge: 32
Registriert: 4. Dezember 2009 13:19

Beitrag von qrk123 »

Ich glaube das ist so nicht anwendbar. Ich müsste aus 5 QTreeWidgets jeweils ein Model generieren und das dann gefiltert anzeigen. Das geht vielleicht noch, auch wenn ich grad nicht weiß wie. Aber nebenbei müssten noch zusätzliche Informationen und spalten eingefügt werden im neuen Baum.

Das geht auch schon so ohne Model. Mein Problem war bis jetzt aber immer, dass es sich nur um referenzen gehandelt hat und sich auch die anderen 5 Bäume verändert haben. Und wenn ich ein Model eines anderen Baumes nehme und filtere, dann ist es wohl wieder nur eine Referenz.

Werds jetzt doch mit Kopieren von Objekten versuchen. Aber danke für deine Hilfe.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Das QTreeWidget hat doch schon ein Model:

Code: Alles auswählen

QAbstractItemModel * QAbstractItemView::model () const
Antworten