Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Signale von QTableView in PyQt

  1. #1
    Registrierter Benutzer
    Registriert seit
    09.05.2011
    Beiträge
    11

    Question Signale von QTableView in PyQt

    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:
    Code:
        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:
    Code:
    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

  2. #2
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    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.../src/datatable
    Ist im übrigen ein Stundenbuch mit SQLite3 und Auto Vervollständigungs funktionen.
    Geändert von undefined (30-05-2011 um 19:49 Uhr)
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  3. #3
    Registrierter Benutzer
    Registriert seit
    09.05.2011
    Beiträge
    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...

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •