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 ...
QTableView, QAbstractTableModel und eine Suche
-
- User
- Beiträge: 117
- Registriert: Dienstag 7. April 2009, 13:40
Es hat geklappt. Vielmehr kann ich dazu auch nicht sagen, weil das Beispiel schon alles sagt =)
Vielen Dank!
Vielen Dank!
-
- User
- Beiträge: 117
- Registriert: Dienstag 7. April 2009, 13:40
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.
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.
Code: Alles auswählen
self.model.datas(index, role=QtCore.Qt.DisplayRole)
Code: Alles auswählen
self.proxy.datas(index, role=QtCore.Qt.DisplayRole)
@Trubinial: Und wofür brauchst Du eine ".datas()"-Methode?! Nutze doch einfach ".data()".
-
- User
- Beiträge: 117
- Registriert: Dienstag 7. April 2009, 13:40
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 ...
@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.
-
- User
- Beiträge: 117
- Registriert: Dienstag 7. April 2009, 13:40
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:
"zeile" enthäldt dann die Einträge der gesamten Zeile. Das ist äußerst faul gelöst, aber es funktioniert =)
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()))