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.

Code: Alles auswählen

self.model.datas(index, role=QtCore.Qt.DisplayRole)
Wenn ich aber auf das "gefilterte" TableModel verweise, kommt die Fehlermeldung, dass die Funktion in der Klasse nicht enthalten ist:

Code: Alles auswählen

self.proxy.datas(index, role=QtCore.Qt.DisplayRole)
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 =)