Seite 1 von 1

QTreeWidget: Abbruch nach dem Scrollen

Verfasst: 11. Februar 2009 11:23
von DaFe4u
Hallo zusammen!

Ich habe folgendes (Py)Qt-Problem:
Mein MainWindow enthält ein TreeWidget und 2 PushButtons. Hinter den Buttons verbergen sich QSql-Abfragen, die Inhalte zusammensammeln und diese anschließend im TreeWidget anzeigen. Dazu leere ich jeweils das TreeWidget und fülle es anschließend mit den neuen Daten. Soweit funktioniert das auch problemlos. Wenn allerdings die Zahl der Items so groß wird, dass man im TreeWidget scrollen muss, führt das nächste Anklicken eines Buttons nach dem Scrollen zu einem Abbruch ohne richtige Fehlermeldung.

Einziger Anhaltspunkt bisher ist eine ACCESS_MEMORY_VIOLATION, die ich per Debugger erhalte. Abfangen konnte ich das bisher nicht.

Hat zufällig jemand irgendwelche Ideen, wonach ich mal suchen könnte?

Viele Grüße und Danke!

Verfasst: 11. Februar 2009 13:57
von franzf
Gibt es eine sinnvollere Meldung, wenn du python via gdb startest?

Code: Alles auswählen

gdb --args python myApplicaiotn.py
Denn python an sich sollte nicht so einfach segfaulten. Eher sind da Probleme in den Bindings (die ja kompiliertes c++ sind), und nicht vom python-interpreter gemanaged werden.

Verfasst: 12. Februar 2009 13:43
von DaFe4u
Ich kann den Ablauf, der den Abbruch hervorruft nun genauer beschreiben. Der Test-Lauf mit gdb hat den Verdacht mit der Memory-Violation bestätigt.

Der Abbruch tritt immer dann auf, wenn ich auf einem Item mit Index x stehe und nach einem clear() das TreeWidget mit einer Anzahl an Items < x fülle. Bsp.: curItemIndex = 100 -> clear() -> Anzahl neuer Items 99 -> Abbruch

Ich bin bisher davon ausgegangen, dass clear() die Items nicht nur aus dem Widget entfernt, sondern auch die Anzahl der adressierbaren Items auf 0 setzt... Denkfehler?!

Verfasst: 12. Februar 2009 16:17
von DaFe4u
So, habe ein offenbar funktionierendes Workaround gefunden:
Vor dem clear() springe ich mit scrollTo() auf das erste Item und siehe da, kein Abbruch! ;-)

Danke trotzdem! Sollte jemand eine elegantere Lösung, wäre ich natürlich für jeden Hinweis dankbar!

Gruß,
DaFe4u