Bei QProgressDialog alle Events außer Userevents verarbeiten
Verfasst: 30. August 2006 09:39
Hallo!
Ich hangel mich gerade durch das Beispiel und hab es soweit am laufen, dass der Dialog erscheint, schön aktualisiert wird und der Benutzer kann die Fenster verschieben bzw. sie werden neugezeichnet, da ich
aufrufe. Problem: Der User kann auf das fiese X klicken und die Anwendung beenden, dann gibts beim QProgressDialog einen tollen Deadlock. Meine Idee wäre, dass ich nicht die Userevents verarbeite, nur neuzeichnen usw.
Das soll ja laut Doku so gehen (was heißt laut Doku, dass musste ich zusammenbasteln
):
Leider ist das keine statische Methode, sondern von QEventLoop muss ein Objekt angelegt werden. Da hilft mir die Doku aber nicht weiter, wenn ich eines anlege und dann diese Methode aufrufe hängt die GUI dennoch, d.h. sie macht gar nichts. Hier mal mein Code
Ich hangel mich gerade durch das Beispiel und hab es soweit am laufen, dass der Dialog erscheint, schön aktualisiert wird und der Benutzer kann die Fenster verschieben bzw. sie werden neugezeichnet, da ich
Code: Alles auswählen
QApplication::processEvents();
Das soll ja laut Doku so gehen (was heißt laut Doku, dass musste ich zusammenbasteln
Code: Alles auswählen
QEventLoop::processEvents( QFlags<QEventLoop::ProcessEventsFlag>(QEventLoop::ExcludeUserInputEvents));
Leider ist das keine statische Methode, sondern von QEventLoop muss ein Objekt angelegt werden. Da hilft mir die Doku aber nicht weiter, wenn ich eines anlege und dann diese Methode aufrufe hängt die GUI dennoch, d.h. sie macht gar nichts. Hier mal mein Code
Code: Alles auswählen
QEventLoop eventloop(this);
eventloop.exec();
QProgressDialog progress("Copying files...", "Abort Copy", 0, 3192, this);
progress.show();
for (int i = 0; i < 3192; i++)
{
progress.setValue(i);
// Geht super mit dieser Methode, nur ich will halt keinen UserInput verarbeiten!
// QApplication::processEvents();
eventloop.processEvents( QFlags<QEventLoop::ProcessEventsFlag>(QEventLoop::ExcludeUserInputEvents));
if (progress.wasCanceled())
break;
Sleep(4);
//... copy one file
}
progress.setValue(3192);
eventloop.quit();
return(true);´
- Kann mir da jemand helfen?