Einfaches Beispiel mit QProgressDialog: Irgendwelche Ideen, warum das nicht richtig funktioniert?

8

Ich versuche, ein einfaches Beispiel mit QProgressDialog zu machen. Also habe ich einen QPushButton in einem Widget und wenn ich es drücke, erscheint ein QProgressDialog, geht bis 100 weiter und versteckt sich dann.

Mein Problem ist, dass, wenn ich zum zweiten Mal auf den Speichern-Knopf klicke, der QProgressDialog gerade erscheint und verschwindet.

Der Code meines Slots, der aufgerufen wird, wenn der Benutzer die Taste drückt:

%Vor%     
Chrys 06.12.2011, 11:42
quelle

1 Antwort

13

Sie müssen der GUI erlauben, sich selbst zu aktualisieren / neu zu zeichnen. Dies geschieht nicht bei jedem Aufruf von setXXX, da es zu teuer und unnötig ist. Ein redraw () - Ereignis wird jedoch in die Warteschlange gestellt. Wenn Sie zulassen, dass Qt Ereignisse verarbeitet, wird das Dialogfeld aktualisiert.

Fügen Sie einfach Folgendes in Ihre for-Schleife ein und lesen Sie die Dokumentation für weitere Informationen Anwendungsszenarien:

%Vor%

Außerdem läuft die Schleife viel zu schnell, als dass etwas angezeigt werden könnte. Fügen Sie einen Schlafanruf hinzu oder führen Sie nützliche Arbeit aus, um etwas zu sehen.

Aktualisieren (thx Tim)

Sie können QApplication::processEvents( QEventLoop::ExcludeUserInputEvents) verwenden, um Benutzerereignisse zu verbieten (es gibt auch eine Option für Netzwerkereignisse). Sie können andere Teile in Ihrer Anwendung auslösen und Re-Entrance und andere unerwünschte Kontrollflüsse verursachen.

Aber in Ihrem Fall möchten Sie wahrscheinlich Benutzerereignisse einschließen, um die Abbrechen-Schaltfläche zu erhalten.

    
Macke 06.12.2011, 11:45
quelle

Tags und Links