Qtableview+QAbstractTableModel - Reihe auswählen

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Trubinial Guru
User
Beiträge: 117
Registriert: Dienstag 7. April 2009, 13:40

Hey, ich war grade dabei ein mini Programm damit zu erstellen, als ich gemerkt habe, dass es plötzlich funktioniert =)
Ich habe mehrere kleine Sachen geändert, kann aber nicht genau sagen woran es lag, vielleicht an der connect Schreibweise.
Nur gibt es noch ein Problem: Anders als im mini-Programm beendet sich mein "großes" Programm nach dem Doppelklick auf eine Zeile und der anschließenden Rückgabe der Daten. Die letzte Meldung im Terminal:
Speicherzugriffsfehler
Habt ihr ne Idee??
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ja. Das sieht danach aus, als würdest Du den `parent`-Parameter an irgend einer Stelle nicht sauber setzen. Tust Du das nicht, so wird das C++-Objekt im Speicher evtl. zu früh gelöscht. Dann kommt es im Qt-Umfeld gerne mal zu diesem Fehler.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Trubinial Guru
User
Beiträge: 117
Registriert: Dienstag 7. April 2009, 13:40

Ohje, gibts da irgendeinen Tipp um die betroffene Stelle zu finden, ich hätte keine Ahnung wo ich anfangen soll zu suchen...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Trubinial Guru hat geschrieben:Ohje, gibts da irgendeinen Tipp um die betroffene Stelle zu finden, ich hätte keine Ahnung wo ich anfangen soll zu suchen...
Naja, beim Modell im Zweifel. Die Objekte, die beim Crash eine Rolle spielen eben...
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
lunar

@Trubinial Guru: Woher sollten wir denn wissen, wo Du nach dem Fehler suchen musst?! Wir kennen ja nicht einmal den Quelltext ... und niemand hier kann hellsehen :)

Es wäre also hilfreich, ein Beispiel zu zeigen, dass den Absturz reproduziert (und bitte nur ein Beispiel, nicht den gesamten Quelltext).

Insgesamt hört sich das auch so an, als würdest Du oft einfach so lange am Quelltext rumprobieren, bis es „funktioniert“, programming by accident also. Zumindest schließe ich das aus der Tatsache, dass Du selbst nicht mehr zu wissen scheinst, welche Effekte die von Dir am Quelltext vorgenommenen Änderungen haben. Es wäre für Dich und für uns einfacher, wenn Du strukturierter Vorgehen würdest, und Dir jeweils immer vor der Anpassung des Quelltext überlegst, was Du erreichen möchtest und wie das umzusetzen wäre.
Trubinial Guru
User
Beiträge: 117
Registriert: Dienstag 7. April 2009, 13:40

Hey ihr beiden, also ich hab das Problem gefunden und jetzt läuft alles wie es soll, Vielen Dank!

Das Problem war, dass der Quelltext ordentlich lang war und als ich dann grad nen kleines Programm aus den Schnipsel basteln wollte funktionierte es ja. Tud mir leid, wenn es für euch ein wenig anstrengend war.
Auf jedenfall Danke ich euch für eure Mühen!! - ein bischen "Mutterhilfe" muss auch mal sein :D

LG und nochmal vielen Dank!
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Vielleicht könntest Du wenigstens die Lösung kurz beschreiben und / oder ggf. einen kurzen Schnipsel posten, der die Lösung aufzeigt. Mag ja sein, dass jemand mit demselben Problem auf den Thread stößt. Der ärgert sich dann, wenn er eine Mutmaßung liest, aber keine Bestätigung bzw. Lösung lesen kann.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Trubinial Guru
User
Beiträge: 117
Registriert: Dienstag 7. April 2009, 13:40

Also das größte Problem war, dass der connector bei mir lange so aussah:

Code: Alles auswählen

self.connect(self.datenbank_auflistung, QtCore.SIGNAL('doubleClicked(QModelIndex)'), self.edit(QModelIndex))
Das hat zu dem TypeError geführt. Lösungen sind entweder so wie du das gepostet hattest:

Code: Alles auswählen

self.datenbank_auflistung.doubleClicked.connect(self.edit_voc)
oder auch, was aber nicht so schön ist

Code: Alles auswählen

self.connect(self.datenbank_auflistung, QtCore.SIGNAL('doubleClicked(QModelIndex)'), self.edit)
Das mit dem beenden des Programmes war ein dummer Programmierfehler (ich hatte an einer Stelle selber dafür gesorgt, dass es sich schließt)
Ich hoffe das hilft
Antworten