Seite 1 von 1

QProgressDialog und Datenbankzugriff

Verfasst: 18. Juli 2011 11:59
von sooofunky
Hallo,

hätte wieder eine Frage. Der Code Ausschnitt unten soll den Benutzer über den Datenbank Ladevorgang informieren. Leider erscheint der Ladedialog meist zu spät oder ist nur grau. Wenn mehrmals der Ladebutton gedrückt wird, kommt die GUI garnicht mehr nach (obwohl ich den Ladedialog auf setModal(true) gesetzt habe und in der Zwischenzeit kein Klicken möglich sein sollte). Dachte mir, der Ladedialog sollte noch bevor auf die Datenbank zugefriffen wird angezeigt werden? Hier verstehe ich wohl wieder etwas nicht.

Code: Alles auswählen

QProgressDialog *dlg = new QProgressDialog(0,Qt::Popup);
dlg->setModal(true);
if (db.open())
{
    if(query.exec() && query.first())
    {
         while (query.next())
         {
              dlg->setValue(counter);
         }
    }
}
delete dlg;			

Re: QProgressDialog und Datenbankzugriff

Verfasst: 18. Juli 2011 15:37
von upsala
QProgressDialog und QSqlDatabase laufen im selben Thread, aber Datenbankzugriffe lassen sich nicht unterbrechen, deswegen funktioniert das ganze nicht.

Re: QProgressDialog und Datenbankzugriff

Verfasst: 19. Juli 2011 11:27
von sooofunky
Verstehe - danke. In meiner Applikation werden Datensätze für ein Diagramm abgerufen. Während die Daten geladen werden, soll keine Interaktion möglich sein. Das heisst, der Benutzer sieht einen Ladebalken und erst wenn dieser fertig ist, kann der nächste Datensatz geladen werden. Im Hintergrund können aber sehr wohl noch andere Datensätze vom Programm geladen werden, mittels QTimer.

Es wird also notwendig sein, alle Datenbankabfragen in einen eigenen Thread zu legen? Den QProgressDialog kann ich dann im Mainthread laufen lassen.

Re: QProgressDialog und Datenbankzugriff

Verfasst: 20. Juli 2011 14:34
von sooofunky
Ist der Overhead gross, wenn ich für jede Datenbankabfrage ein neues QThread Objekt erstelle (wird nur neu erstellt wenn alte Abfrage fertig ist)?