Warum ist ein QProgressDialog bekommt nach der Ausführung eines QProcess nicht aktualisiert?
-
26-09-2019 - |
Frage
Ich bin mit einem QProgressDialog den Status eines langen laufenden Betrieb zu zeigen, die beim Betrieb eines externen ausführbaren einen Schritt. Ich betreiben die externe ausführbare Datei mit dem QProcess :: Methode execute (). QProgressDialog funktioniert das Etikett Text zu aktualisieren, bis es die QProcess erreicht :: execute () -Methode, wonach sie nicht den Zustand nicht aktualisiert.
Wie der Zustand zu aktualisieren, nachdem die ausführbare Datei ausgeführt wird.
Lösung
QProcess::execute()
eine blockierende Methode: es wird seine Berufung Thread blockiert, bis der erzeugte Prozess beendet wird. Es Sie diese Methode aus dem Haupt-Thread aufrufen, wird UI Ereignisse nicht behandelt werden, bis die Methode zurück.
Um dies zu umgehen, können Sie eine Instanz von QProcess
zu erstellen (anstatt mit seinen statischen Methoden) und dann einen Schlitz erstellen, die den Teil der Operation wird fortgesetzt, die Ausführung beendet ist, nach dem externen Prozess geschieht und verbinden Sie es mit dem QProcess::finished(int, QProcess::ExitStatus)
Signal .