Seite 1 von 1

externer Programmaufruf in einer Qt4-Application

Verfasst: 18. Oktober 2007 18:14
von B-Barth
Hallo.
Seit etwas längerer Zeit suche ich nach einer Möglichkeit in meiner eigenen Qt4-Application (die ich mit Hilfe des Tutorials geschrieben hab') andere selbst geschriebene Programme (und/oder Skripte) aufzurufen. Den gesamten Quellcode reinzukopieren ist sicherlich nicht DIE Lösung, deshalb hab' ich es bisher mit der C++-Funktion popen() versucht. Auch ein alternativer Versuch mit fopen() wurde unter Linux SuSe 10.2 nur mit einem "segmentation fault" quittiert.
Hier mal der relevante Teil meines Codes:

Code: Alles auswählen

void MainWindow::recognition()
{
	FILE *RECOGprog;
	RECOGprog = popen(("./cardident.sh 1056"), "r");
	char *buffer = "";
	while(!feof(RECOGprog))
	{
		fgets(buffer, 255, RECOGprog);
		printf("%s\n", buffer);
	}

	fclose(RECOGprog);

	results->setText("New results:");
}
Die Ausgaben, die die Programme, die über das Skript aufgerufen werden, auswerfen, möchte ich am liebsten als Text in ein widget umleiten. Aber zunächst einmal wäre mir allein mit dem Aufruf und Durchlauf des Skriptes sehr weiter geholfen.
Auch die Angabe von "x" als zweites Argument von popen() führte mein Skript leider nicht aus. Ich hoffe, es kann mir jemand (schnell) weiterhelfen. Danke schonmal im Voraus.

Verfasst: 18. Oktober 2007 18:19
von Christian81
Warum C api wenn es QProcess gibt??

Verfasst: 19. Oktober 2007 14:51
von B-Barth
Vielen Dank für die schnelle Hilfe und sehr gute Lösung :D .

Die Idee mit popen() und damit C api habe ich von einem Kommilitonen erhalten, der damit (und mittlerweile auch aus meiner Sicht sehr viel Aufwand) ähnliche Probleme gelöst hat/haben will.

Hab' nach dem Tip mit QProcess mal wieder einen Blick in die Doku geworfen (sollte man wahrscheinlich häufiger tun - ab die Zeit ist eben manchmal knapp) und mittlerweile funktioniert sowohl der externe Programmaufruf als auch das Abfangen und Anzeigen des Textes der Standardausgabe in meinem Widget.

Also vielen Dank nochmal und falls ich mal wieder Probleme/Fragen haben sollte weiß ich, dass ich in diesem Forum gut aufgehoben bin.