Ich habe ein Programm, welches einen Arbeiter-Thread hat. In diesem Laeuft die Datenbank mit einer Art Vermittlungsklasse, welche alle noetigen SQL-Anweisungen anthaelt. Ueber letztere greifen dann alle anderen Objekte auf die Datenbank zu.
Die Gui laeuft in einem anderen Thread und benutzt QTableViews um Datenbank-Abfragen anzuzeigen. Dabei uebergibt ein Gui-Objekt einen Zeiger auf ein QStandardItemModel an die Vermittlungsklasse im anderen Thread, welche dann das Model mit Daten befuellt.
Dabei ist es wichtig, dass die Zeigeruebergabe an die Vermittlungsklasse ueber eine QueuedConnection geht.
Evtl ist dabei noch die Zeile
Code: Alles auswählen
qRegisterMetaType< Qt::Orientation >("Qt::Orientation");Es kam nun zu Anzeigefehlern und sporadischen Abstuerzen mit der Meldung
Code: Alles auswählen
ASSERT: "i >= 0 && i < size()" in file ../../include/QtCore/../../src/corelib/tools/qbitarray.h, line 121
AbortedDie Vermittlungsklasse teilt der Gui-Klasse mit, wenn sie fertig mit dem Befuellen des Models ist. Ich habe dies mit einem Signal geloest.
Erst dann darf das model mittels setModel der QTableView zugewiesen werden. Mein Fehler war, dass ich noch vor der Datenanfrage bei der Vermittlungsklasse quasi das noch leere model der QTableView zugewiesen habe. Offensichtlich werden dabei dann die Threads sehr oft zu einem unguenstigen Zeitpunkt schlafen gelegt.
Ich hoffe das hilft jemandem weiter.
Colonel