QSortFilterProxyModel und insertRow()

Alles rund um die Programmierung mit Qt
Antworten
OscarWild
Beiträge: 54
Registriert: 19. Juni 2006 19:59

QSortFilterProxyModel und insertRow()

Beitrag von OscarWild »

Hallo,

ich verwende eine QTreeView mit einem von QAbstractItemModel abgeleitetem Modell.

Folgender Python-Code fügt problemlos eine neue Node unterhalb der aktuellen Position ein:

Code: Alles auswählen

selection_model = self.ui.TV_Variables.selectionModel()
index = selection_model.currentIndex()
self._model.insertRow(index.row() + 1, index.parent())

child = self._model.index(index.row() + 1, 0, index.parent())
self._model.setData(child, QVariant("(neu)"), Qt.EditRole)
So weit, so gut. Nun würde ich aber gerne ein QSortFilterProxyModel einsetzen, um die TreeView bequem sortieren zu können.

Code: Alles auswählen

self._model = QSortFilterProxyModel(self)
self._model.setSourceModel(self._SourceModel) # das ursprüngliche Modell
self.ui.TV_Variables.setModel(self._model)
Leider wird in diesem Fall die neue Node dann nicht unterhalb der aktuellen, sondern stets an unterster Position erstellt, während das darauf folgende setData() eine bestehende Node überschreibt (an der Stelle, an der ich die neue Node eigentlich erwartet hätte).

Was mache ich da nur falsch?


Gruß + vielen Dank für jede Hilfe vorab
OscarWild

[edit: Copy-/Pastefehler im Code beseitigt]
Zuletzt geändert von OscarWild am 4. Dezember 2009 09:42, insgesamt 1-mal geändert.
OscarWild
Beiträge: 54
Registriert: 19. Juni 2006 19:59

Beitrag von OscarWild »

Ich habe das QSortFilterProxyModel zwischenzeitlich aufgegeben, und einfach eine sort()-Methode für mein Modell implementiert. Damit läuft alles problemlos.

Trotzdem frage ich mich, warum sich das QSortFilterProxyModel so seltsam verhält, bzw. wie sich das ändern lässt... verwendet das denn sonst niemand?
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Beitrag von archer »

Es gibt im QSortFilterProxyModel Methoden mapToSource bzw. mapFromSorce.
Du solltest dir diese mal ansehen, um den Index aus dem QSortFilterProxyModel in einen für das Quellmodel umzusetzen.
OscarWild
Beiträge: 54
Registriert: 19. Juni 2006 19:59

Beitrag von OscarWild »

Hallo Archer,

damit kann ich die jeweils zueinander gehörenden Indices ermitteln. Aber ich glaube, das hilft mir nicht weiter. Mir ist es ja völlig egal, wo die neue Node im Quellmodell landet, ich möchte, das sie im Proxymodell gezielt unterhalb der aktuellen Node platziert wird. Jetzt könnte ich natürlich nach dem Einfügen das Proxymodell entsprechend hinsortieren, aber das wäre doch irgendwie absurd...

Gruß
OscarWild
Antworten