Seite 1 von 1

QSortFilterProxyModel und insertRow()

Verfasst: 1. Dezember 2009 17:27
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]

Verfasst: 4. Dezember 2009 09:41
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?

Verfasst: 4. Dezember 2009 10:20
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.

Verfasst: 4. Dezember 2009 14:51
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