Qt redraw.
-
Hallo,
ich würde gerne eine progessbar wärend einer Funktion immer neu zeichnen.
Also gedacht ist es so, dass ich eine Query von z.b. 7000 Elementen habe die ich abbarbeiten möchte. Nach jedem Element soll der Prozentbalken aktualisiert werden damit man sehen kann wie weit man ist.Vermutlich sehr simpel zu machen da qt an funktionen wie repaint() gedacht hat.
Aber wie funktioniert es?So funktioniert es leider nicht.
QProgressBar* prog = new QProgressBar(this); prog->setValue(0); ui->vLayoutSDBExport->addWidget(prog); _u32 percent = 0; for(_u32 i = 0; i < size; i++) { exp->executeSDBQueryAt(i); // Hier wird gearbeitet percent = ((i + 1) / size) * 100; prog->setValue(percent); prog->repaint(); // versuch GUI element neu zu zeichnen. } exp->finishExport();
-
Lies dir Keeping the GUI Responsive durch.
Aber ich will dir die einfache (wenn auch schlechte) Lösung nicht vorenthalten:
qApp->processEvents();
-
Th69 schrieb:
Lies dir Keeping the GUI Responsive durch.
Aber ich will dir die einfache (wenn auch schlechte) Lösung nicht vorenthalten:
qApp->processEvents();
Danke für deinen Vorschlag! Und danke dafür das du mir trotzdem eine "Lösung" präsentierst von der du vermutlich berechtigt nicht begeistert bist.
Das mit den Threads hatte ich mir auch überlegt. Einfach einen Worker Thread starten der an das GUI notifys über einen Observer schickt. Nur haut mir QT alles um die ohren wenn ich versuche das GUI über einen Thread zu verändern.
Das hatte mir auch vorher schon Probleme gemacht. Ich hab einen Timer Thread der nach einer bestimmten Zeit ein notify mit GUI änderungen callte. Das ging immer kolossal schief.qApp->processEvents();
Funktioniert wie erwartet. Aber ich werde mich gerne an der ordentlichen Lösung versuchen.
-
Mittels 'emit' sollte das aber einwandfrei funktionieren, s. z.B. Updating GUI from QThread.