Seite 1 von 1

QSqlQueryModel und QThread

Verfasst: 13. April 2010 16:23
von peter1
ich habe ein Problem mit QSqlQueryModel und QThread.

QThread bzw. threads an sich verstehe ich, mit fork hatte ich früher auch schon gearbeitet.

QSqlQueryModel und QTableView nutze ich z.Zt. in einem Projekt. Das klappt soweit, wobei ich noch nicht verinnerlicht habe, was da im Hintergrund alles Passiert.

Mein Problem ist, wie bei vielen, die mit SQL Arbeiten und hier Fragen stellen...
...wenn mein Query verarbeitet wird, blockiert mein GUI.

Den Artikel unter http://webcache.googleusercontent.com/s ... clnk&gl=de
habe ich auch gelesen. Ist wohl das einzige passende, daß in diese Richtung geht.

Jedoch schaffe ich das dortige nicht auf ein Model umzusetzen. Geht das überhaupt mit QSqlQueryModel? Oder müsste ich von QAbstractItemModel ausgehen und dafür selber was bauen?

Wenn ich das richtig sehe, müsste ich das Model haben, das vom View angezeigt wird. setQuery würde in einen thread laufen, und wenn Ergebnisse da sind, diese in das Model im GUI Thread schreiben.

Ist das soweit zumindest richtig?

Oder gibt es vielleicht ein Beispiel dafür?

Verfasst: 14. April 2010 14:19
von Troll.Soft
Hallo Peter,
Dein Problem kommt noch auf mich zu. Habe also noch keine fertige Lösung ( im Moment ein workaround: Der Mauscursor mutiert zur Sanduhr, wenn Zugriff auf DB )
Hypothese: Die Query im eigenen Thread laufen lassen und per signal-slot und .setQuery(..) an das Model übergeben.
Ein mögliches Problem ist QDatabase. Da muss sich in jedem Thread eine eigene Instanz befinden.
Erzähl, wie es gelaufen ist.
tschüß
Troll.Soft

Verfasst: 25. April 2010 12:56
von peter1
Mir ist es soweit klar, daß das GUI nur im Hauptthread angefasst werden darf.
Auch ist mir klar, daß ich die DB verbindung im jeweiligen Thread erledigen sollte.

Bei folgende Vermutungen bräuchte ich eine Bestätigung:
Ich vermute das Model für den View sollte auch im Hauptthread sein.

Gibt es eine Möglichkeit das mit QSqlQueryModel bzw. eine Ableitung davon zu realisieren, oder sollte ich mit QAbstractItemModel anfangen?

Ich wollte halt vermeiden etwas zu machen, was vielleicht schon vorhanden ist.

Verfasst: 25. April 2010 20:37
von Troll.Soft
Hallo Peter,
habe in der Threadsache immer noch nichts gemacht. Wird auch noch eine Weile dauern :)
Inzwischen ist mir aber folgende Idee gekommen. Alles (Model und Gui) im Gui-Haupt-Thread machen, testen usw. In Kauf nehmen, das Gui erstarrt.
Wenn alles läuft, aus dem Gui-Thread heraus einen extra Thread starten und aus diesem extra Thread das Model starten. Wenn fertig ein Signal an den Gui-Thread senden.
tschüß
Troll.Soft

Verfasst: 25. April 2010 20:39
von Troll.Soft
peter1 hat geschrieben:Gibt es eine Möglichkeit das mit QSqlQueryModel bzw. eine Ableitung davon zu realisieren, oder sollte ich mit QAbstractItemModel anfangen?
Von einem abstracten ... sollte man keine Instanz bilden können. Also QSqlQueryModel oder wenn Du gleich was anzeigen willst das TabelModel.

Verfasst: 20. Mai 2010 20:37
von peter1
gibt es sonnst niemand, der dazu was sagen kann, oder hat wer eine ausführliche Anleitung, oder beispielcode?