QProgressDialog und Datenbankzugriff

Alles rund um die Programmierung mit Qt
Antworten
sooofunky
Beiträge: 31
Registriert: 4. Mai 2011 11:48

QProgressDialog und Datenbankzugriff

Beitrag 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;			
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Re: QProgressDialog und Datenbankzugriff

Beitrag von upsala »

QProgressDialog und QSqlDatabase laufen im selben Thread, aber Datenbankzugriffe lassen sich nicht unterbrechen, deswegen funktioniert das ganze nicht.
sooofunky
Beiträge: 31
Registriert: 4. Mai 2011 11:48

Re: QProgressDialog und Datenbankzugriff

Beitrag 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.
sooofunky
Beiträge: 31
Registriert: 4. Mai 2011 11:48

Re: QProgressDialog und Datenbankzugriff

Beitrag 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)?
Antworten