Bei QProgressDialog alle Events außer Userevents verarbeiten

Alles rund um die Programmierung mit Qt
Antworten
Delryn
Beiträge: 70
Registriert: 24. Februar 2006 11:15

Bei QProgressDialog alle Events außer Userevents verarbeiten

Beitrag von Delryn »

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

Code: Alles auswählen

QApplication::processEvents(); 
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 ;) ):

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?
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Einfach den closeEvent überschreiben und da entscheidest Du dann, ob das Fenster geschlossen werden darf oder nicht.
Delryn
Beiträge: 70
Registriert: 24. Februar 2006 11:15

Beitrag von Delryn »

macman hat geschrieben:Einfach den closeEvent überschreiben und da entscheidest Du dann, ob das Fenster geschlossen werden darf oder nicht.
hehe genau so hatte ich es zwischenzeitig gelöst, ist in meinen Augen ist das aber eigentlich ein Hack ;) na ja, es geht jetzt ja.
Antworten