QTableView: Rows verstecken

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
nfehren
User
Beiträge: 98
Registriert: Donnerstag 31. Oktober 2013, 15:11

Hallo Leute,
Ich verbringe jetzt schon Stunden mit meinem Problem und bitte euch jetzt um eure Hilfe.

Ich habe ein tableView mit einem QSortFilterProxyModel das ein QAbstractTableModel als source model hat.
In dem tableView kann man nach dem Inhalt der einzelnen Columns sortieren per sortindicator. Allerdings kommt sich das
in die Quere mit meinem Filter, der über die Rows vom Model iteriert und dann je nach Wert der zu filternden Spalte, die row versteckt oder nicht.

Solang die Sortierung nicht geändert wird funktioniert alles. Hier ein Beispiel aus meiner Filter Klasse:

Code: Alles auswählen

for row in range(self.JobManagement.sortModel.rowCount()):
    old_index = self.JobManagement.sortModel.index(row, 0)
    new_index = self.JobManagement.sortModel.mapToSource(old_index)
    row = new_index.row()
    if example_condition:
        JobManagement.tableView.setRowHidden(row, True)
Wie ihr sehen könnt mappe ich den index schon auf den source index, doch sobald ich am sortindicator der einzelnen Spalten die Sortierung änder werden falsche Zeilen versteckt.

Ich bin über jede Antwort und jeden Tipp SEHR dankbar!!
Liebe Grüße
Zuletzt geändert von Anonymous am Montag 19. Dezember 2016, 11:35, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@nfehren: Warum gehst Du da von aussen über die Zeilen und willst welche Aufgrund einer Bedingung verstecken wenn Du doch ein `QSortFilterProxyModel` verwendest‽ Warum nicht davon ableiten und `filterAcceptsRow()` überschreiben?
nfehren
User
Beiträge: 98
Registriert: Donnerstag 31. Oktober 2013, 15:11

Hi BlackJack!
Danke für deine schnelle Antwort.
BlackJack hat geschrieben:@nfehren: Warum gehst Du da von aussen über die Zeilen und willst welche Aufgrund einer Bedingung verstecken wenn Du doch ein `QSortFilterProxyModel` verwendest‽ Warum nicht davon ableiten und `filterAcceptsRow()` überschreiben?
Hättest du ein einfaches Beispiel dafür? Bin darauf auch schon in der Doku gestoßen, bloß ist er mit nicht ganz eingeleuchtet..

LG

EDIT: Auch wenn meine momentane Vorgehensweiße nicht die Beste ist, gibt es eines Weg sie zum Funktionieren zu kriegen?
BlackJack

@nfehren: In der Qt-Dokumentation ist bei der Methode ein Beispiel und ein Verweis auf ein Beispielprogramm.
Antworten