Seite 1 von 1

Signal -> wann externes Programm beendet

Verfasst: 7. August 2006 09:24
von kleineSchildy
Hallo,

icb probier nun schon ne ganze Weile rum, wie ich abfangen kann, wann mein externes Programm sich beendet. Leider komme ich auf keinen grünen Zweig. Könnt ihr mir evt. helfen?

Hier ist erstmal mein Code:

Code: Alles auswählen

ScriptStarterDialog::ScriptStarterDialog( QWidget* parent, const char* name, bool modal, WFlags fl ) : QDialog( parent, name, modal, fl ){
...
    connect( buttonOk, SIGNAL( clicked() ), this, SLOT( executeScript() ) );
    connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( close() ) );
}


void ScriptStarterDialog::executeScript(){

	bool exit=FALSE;
	QString text;
	
   QProcess *proc;
	proc = new QProcess(this);
	proc->addArgument("start.bat");

	if(!proc->start()){
		QMessageBox::critical( this, "ScriptStarter",
		"Script is not able to start.");
	}

	text = "Script starts...";
	ausgabe->setText(text);

}
Ich habe keinen Plan, wo ich folgendes Signal einbauen soll:

connect( proc, SIGNAL( processExited ()), this, SLOT( analyse() ) );


Vielen Dank für eure Hilfe.

Viele Grüße
Jana

Verfasst: 7. August 2006 11:12
von Christian81
Sollte da nicht QProcess::prcessExited() helfen?

Verfasst: 7. August 2006 11:34
von kleineSchildy
Hallo Christian,

wie du weiter unten in meinem Post lesen kannst, bin ich darauf auch schon gekommen
connect( proc, SIGNAL( processExited ()), this, SLOT( analyse() ) );
Mein Problem ist, dass ich nicht weiß, wie ich das Signal in meinen Code integrieren soll.

1. Innerhalb der Methode, wo mein externes Programm gestartet wird, geht nicht. Die Methode beendet sich nach dem Start des Programms und das wars.

2. Dort, wo schon die restlichen Signale stehen, geht es auch nicht, weil dort meine Variable "proc" nicht gekannt wird.

Viele Grüße
Jana

Verfasst: 7. August 2006 11:41
von Christian81
[quote="kleineSchildy"
1. Innerhalb der Methode, wo mein externes Programm gestartet wird, geht nicht. Die Methode beendet sich nach dem Start des Programms und das wars.[/quote]
Und was hindert dich daran dort ein connect zu machen?

Verfasst: 8. August 2006 10:25
von kleineSchildy
Es funktioniert nicht. Ich sehe ja mit dem Taskmanager, wann sich mein externes Programm beendet. Und es wird von dem connect nicht registriert.

Woran kann das liegen?

Verfasst: 8. August 2006 10:39
von Christian81
Ist der Slot analyse() auch korrekt? Kompiliere mal mit 'COFNIG += console' damit du ggf. Warnungen zur Laufzeit siehst. Evtl. auch mal debuggen und bei QProcess::processExited() einen Breakpoint setzen.
Bei mir geht das ohne Probleme.
Es gibt imho auch ein Beispiel in den examples.

Verfasst: 8. August 2006 11:17
von kleineSchildy
das Problem ist, dass scheinbar das Signal gesendet wird, bevor das externe Programm überhaupt gestartet wurde.

Ich drücke dem Button für die Ausführung und sofort kommt die Naricht, dass das Programm beendet wurde, obwohl ich sehe (im Taskmanager), dass es gerade mal gestartet wurde :roll:

Verfasst: 8. August 2006 11:28
von kleineSchildy
hab den "Fehler" gefunden.

ich starte mein Programm ja über eine BAT-Datei. Die hat sich, sobald sie ausgeführt war, beendet. Nun hab ich dort kleine Änderung gemacht und nun klappt alles.

Danke trotzdem für deine Hilfe.