in ein laufendes Programm eingreifen
in ein laufendes Programm eingreifen
Hi,
ich habe wieder mal eine Frage:
in meinem Programm habe ich eine while - schleife eingebaut, das mir bestimmte Werte berechnet und auf der Konsole ausgibt. Jetzt möchte ich aber einen weiteren PushButton einfügen, der diese Ausgabe unterbricht. Das ghet ja theoretisch auch (mit Signal/Slot), aber ich kann während mein programm rechnet und fleißig ausgibt den Pause-Button nicht betätigen.
Ist die einzige Möglichkeit diesen Slot zu aktivieren, bzw den Pausebutton drücken zu können über QDialog (nichtmodal)? Oder gibt es da noch eine andere Möglichkeit?
Danke
qtprog
ich habe wieder mal eine Frage:
in meinem Programm habe ich eine while - schleife eingebaut, das mir bestimmte Werte berechnet und auf der Konsole ausgibt. Jetzt möchte ich aber einen weiteren PushButton einfügen, der diese Ausgabe unterbricht. Das ghet ja theoretisch auch (mit Signal/Slot), aber ich kann während mein programm rechnet und fleißig ausgibt den Pause-Button nicht betätigen.
Ist die einzige Möglichkeit diesen Slot zu aktivieren, bzw den Pausebutton drücken zu können über QDialog (nichtmodal)? Oder gibt es da noch eine andere Möglichkeit?
Danke
qtprog
Selbst wenn Du einen nicht modalen Dialog machst wirst du während der Ausführung deiner while Schleife nicht auf die Benutzeroberfläche zugreifen können. Zu mindest nicht solange die Berechnung im gleichen Thread abläuft wie die GUI.
Die einzige Möglichkeit so etwas zu realisieren ohne einen eigenen Thread für die Berechnung zu starten, düfte der Aufruf von qApp->processEvents() innerhalb der while Schleife sein. Siehe dazu auch QProgressDialog.
Die einzige Möglichkeit so etwas zu realisieren ohne einen eigenen Thread für die Berechnung zu starten, düfte der Aufruf von qApp->processEvents() innerhalb der while Schleife sein. Siehe dazu auch QProgressDialog.
Zuletzt geändert von Volker am 7. Oktober 2007 21:38, insgesamt 1-mal geändert.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
-
CaptnChaos
- Beiträge: 605
- Registriert: 28. Juni 2007 15:01
- Kontaktdaten:
So wie du das beschreibst klingt es, als ob das Beispiel zu QProgressDialog genau das macht, was Du suchst. Also würde ich mir das anschauen:
http://doc.trolltech.com/4.3/qprogressdialog.html
http://doc.trolltech.com/4.3/qprogressdialog.html
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
-
CaptnChaos
- Beiträge: 605
- Registriert: 28. Juni 2007 15:01
- Kontaktdaten:
Warum sollte die GUI einfrieren, wenn die Events über processEvents abgearbeitet werden? Dann würde ja der QProgressDialog kein Sinn machen.
edit: Das Ding heist QProgressDialog nicht QProcessDialog,... immer wieder schreib ich's falsch
edit: Das Ding heist QProgressDialog nicht QProcessDialog,... immer wieder schreib ich's falsch
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
-
CaptnChaos
- Beiträge: 605
- Registriert: 28. Juni 2007 15:01
- Kontaktdaten:
Hab ich schon funktioniert wunderbar. Man sollte nur keine Sachen in der while Loop machen, die irgendwelche Signale auslösen die mit Slots verbunden sind, das führt dann recht schnell zu inkonsistenten Zuständen. Aber das hängt dann eher vom jeweiligen Programm ab.
Außerdem sollte der Rechenaufwand für eine Iteration klein sein, da logischerweise während der Ausführung der GUI Thread weiterhin blockiert. Wenn das was es zu Berechnen gibt für eine Iteration lange dauert, dann sollte man in der Tat auf einen Thread ausweichen. Aber für simple Sachen reicht processEvents allemal.
Außerdem sollte der Rechenaufwand für eine Iteration klein sein, da logischerweise während der Ausführung der GUI Thread weiterhin blockiert. Wenn das was es zu Berechnen gibt für eine Iteration lange dauert, dann sollte man in der Tat auf einen Thread ausweichen. Aber für simple Sachen reicht processEvents allemal.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
-
CaptnChaos
- Beiträge: 605
- Registriert: 28. Juni 2007 15:01
- Kontaktdaten:
-
CaptnChaos
- Beiträge: 605
- Registriert: 28. Juni 2007 15:01
- Kontaktdaten:
Mir ist gerade aufgefallen, in der Doku seit Qt 4.3 ist bei QProgressDialog kein explizer Aufruf von qApp->processEvents mehr enthalten. Ohne in den Source Code geschaut zu haben nehme ich an, die haben den Aufruf in die setValue Methode des QProgressDialogs gepackt. In Qt 4.2 musste man das noch selbst aufrufen.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel