QSqlQueryModel und QThread

Alles rund um die Programmierung mit Qt
Antworten
peter1
Beiträge: 3
Registriert: 9. April 2010 09:01

QSqlQueryModel und QThread

Beitrag 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?
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Beitrag 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
peter1
Beiträge: 3
Registriert: 9. April 2010 09:01

Beitrag 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.
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Beitrag 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
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Beitrag 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.
peter1
Beiträge: 3
Registriert: 9. April 2010 09:01

Beitrag von peter1 »

gibt es sonnst niemand, der dazu was sagen kann, oder hat wer eine ausführliche Anleitung, oder beispielcode?
Antworten