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?
QSqlQueryModel und QThread
-
Troll.Soft
- Beiträge: 190
- Registriert: 18. Juni 2008 09:52
- Wohnort: Hamburg
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
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
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.
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
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
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
Von einem abstracten ... sollte man keine Instanz bilden können. Also QSqlQueryModel oder wenn Du gleich was anzeigen willst das TabelModel.peter1 hat geschrieben:Gibt es eine Möglichkeit das mit QSqlQueryModel bzw. eine Ableitung davon zu realisieren, oder sollte ich mit QAbstractItemModel anfangen?