PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Signale von QTableView in PyQt



samufi
30-05-2011, 09:16
Hallo,
nachdem ich hier schon einmal gute Hilfe bekommen habe, versuche ich es gleich mal erneut :): Ich bin noch ziemlich neu, sowohl in Python als auch in Qt - deshalb habe ich einige Grundlegende Fragen, auf die ich in der Dokumentation und anderen Foren und Threads leider keine Antwort gefunden habe.
Ich versuche gerade eine Datenbank mittels Pythen und Qt zu schreiben. Dafür möchte ich QTableView, am besten zusammen mit QSqlRelationalTableModel, nutzen.
Allerdings möchte ich, dass beim Eingeben (beim Drücken der Taste oder beim "Eintreten" in ein Feld der Tabelle) und/oder beim Ändern des Feldes (also dem "Austreten") spezielle von mir festgelegte Aktionen ausgeführt werden. So möchte ich beispielsweise beim Eintreten in manche Felder diese zu einer Combobox machen (mit QTableView.setIndexWidget) oder die Daten noch manipulieren, bevor sie in die Datenbank geschrieben werden.
Dazu müsste ich entweder mit der Connect-Methode arbeiten oder aber die betreffenden Ereignisse überschrieben. Dass ich nicht weiß, welches der Ereignisse gerade das ist, was ich brauche, könnte ich durch Probieren ändern. Allerdings muss ich ja für meine Aktionen irgendwie den QModelIndex des Kästchens der Tabelle herausfinden, das gerade bearbeitet wird. (also die Information, welches Kästchen gerade betreten wird, das also in eine Combobox umzuwandeln ist) Das sollte das Ereignis doch eigentlich mitliefern. Allerdings weiß ich nicht, wie ich auf diese Informationen zugreifen kann. In einem anderen Beispiel ging es so:


def dropEvent(self, event):
self.setText(event.mimeData().text())

Event liefert also mit mimeData Daten bezüglich des Events. Aber die Events, die ich probiert habe hatten irgendwie keine Eigenschaft namens mimeData.
Kann mir also jemand sagen (am besten auch ein kleines Beispiel geben) wie ich das im konkreten Fall formulieren müsste? Und gibt es vielleicht einen Weg, über den ich mir solche Fragen in Zukunft selbst beantworten kann? (Z.B. eine Seite, auf der alle Events mit Beschreibung aufgelistet ist) Die help()-Funktion ist da irgendwie nicht so aufschlussreich...
Da ich diese Aktionen für ganze Spalten gleich haben möchte, hätte ich jetzt mit einer if-Klausel gearbeitet - etwa in dem Sinne:

If [Feldname] == "Name": [Aktion]
- gibt es dafür noch eine elegantere Formulierung?
Dann möchte ich gerne noch festlegen, was passiert, wenn ich auf den Spaltennamen klicke (ich möchte gerne die Tablelle nach diesem Kriterium sortieren lassen). Gibt es dafür ein vorgefertigtes Event?
Ich hoffe, dass meine Ausführungen verständlich waren - ansonsten erkläre ich mich gerne noch mal.
Allen Helfern schon mal ein großes Dankeschön im Voraus!
Herzliche Grüße,
Samufi

undefined
30-05-2011, 19:42
Du bist ganz auf dem falschen Dampfer – mimeData wird in der Regel nur bei der Verarbeitung von Drag & Drop funktionen verwenden. Was du suchst ist eine Event Verarbeitung bei der Eingabe.

Dafür muss aber das Eingabefeld im Entsprechenden Widget vorliegen – in deinem fall ein QLineEdit mit setCompleter(). Dies lässt sich bei einer Tabelle aber nur mit den Abstrakten Klassen QAbstractTableModel bzw. QAbstractItemModel und QabstractItemDelegate realisieren.

Ein Beispiel in Qt4 kannst du aus einen meiner Projekte entnehmen.
http://gitweb.hjcms.de/cgi-bin/index.cgi/worker/tree/src/datatable
Ist im übrigen ein Stundenbuch mit SQLite3 und Auto Vervollständigungs funktionen.

samufi
20-06-2011, 10:11
Danke undefined und bitte entschuldige, dass ich mich so lange nicht mehr gemeldet habe. Ich werde mir das mal anschauen und mich wahrscheinlich noch mal melden - mit weiteren Fragen...