Seite 1 von 1
QTableView, QAbstractTableModel und eine Suche
Verfasst: Samstag 21. Januar 2012, 06:03
von Trubinial Guru
Hallo, ich habe ein QTableView Widget, welches ich über das QAbstractTableModel "befülle".
Nun möchte ich über dem TableView ein kleines Textfeld als Suche einbringen. Sobald man also etwas in dieses Textfeld eingibt soll er nur noch die Einträge in der Tabelle anzeigen, in denen das gesucht enthalten ist.
Ich hab schon einiges gesucht, aber habe noch keine Lösung für mich gefunden bzw. nicht alles verstanden. Am besten umsetzen kann man das wohl mit dem QSortFilterProxyModel - aber wie? Ich habe diese Klasse noch nie genutzt...
Würde mich über Hilfe freuen ...
Re: QTableView, QAbstractTableModel und eine Suche
Verfasst: Samstag 21. Januar 2012, 14:19
von lunar
Ist nicht schwer:
Beispiel
Re: QTableView, QAbstractTableModel und eine Suche
Verfasst: Montag 23. Januar 2012, 02:39
von Trubinial Guru
Es hat geklappt. Vielmehr kann ich dazu auch nicht sagen, weil das Beispiel schon alles sagt =)
Vielen Dank!
Re: QTableView, QAbstractTableModel und eine Suche
Verfasst: Dienstag 24. Januar 2012, 04:42
von Trubinial Guru
Hey Lunar, jetzt bin ich doch noch auf ein Problem gestoßen. Und zwar habe ich eine Funktion in meinem TableModel eingebaut, auf die ich gerne zugreifen würde. Seitdem ich den Filter eingebaut habe, funktioniert sie nicht.
Wenn ich beim Aufruf dieser Funktion auf das sourceModel verweise funktioniert die Funktion, aber ich übergebe den falschen Index, da ich diesen von dem gefilterten TableModel bekommen habe.
Wenn ich aber auf das "gefilterte" TableModel verweise, kommt die Fehlermeldung, dass die Funktion in der Klasse nicht enthalten ist:
Ich hoffe ich habe das Problem verständlich beschrieben.
Re: QTableView, QAbstractTableModel und eine Suche
Verfasst: Dienstag 24. Januar 2012, 16:18
von lunar
@Trubinial: Und wofür brauchst Du eine ".datas()"-Methode?! Nutze doch einfach ".data()".
Re: QTableView, QAbstractTableModel und eine Suche
Verfasst: Freitag 27. Januar 2012, 02:17
von Trubinial Guru
Naja, während mir die .data() Funktion nur den Eintrag aus einer Zelle zurückgibt, gibt mir meine .data() Funktion die Einträge der ganzen Zeile zurück ... Ich weiß die benennung der Funktion .datas() is nen bisle unglücklich gewählt ...
Re: QTableView, QAbstractTableModel und eine Suche
Verfasst: Freitag 27. Januar 2012, 07:56
von lunar
@Trubinial Guru: Um die Daten einer ganzen Zeile abzufragen, kannst Du auch eine Funktion schreiben, welche das Model als Argument erhält. Ansonsten musst Du eben von QSortFilterProxyModel ableiten, und ".datas()" in der abgeleiteten Klasse implementieren.
Re: QTableView, QAbstractTableModel und eine Suche
Verfasst: Freitag 3. Februar 2012, 18:23
von Trubinial Guru
Nachdem ich das nicht so recht hinbekommen habe, bin ich jetzt auf eine extrem einfache Lösung gestoßen, die bei mir jedenfalls vollkommen ausreicht. Ich schicke einfach den index für jede Spalte der ausgewählten Zeile durch die data() Methode:
Code: Alles auswählen
zeile= []
for spalte in range(6):
zeile.append(unicode(tablemodel.data(tablemodel.index(int(index.row()), spalte), role=QtCore.Qt.DisplayRole).toString()))
"zeile" enthäldt dann die Einträge der gesamten Zeile. Das ist äußerst faul gelöst, aber es funktioniert =)