externer Programmaufruf in einer Qt4-Application

Alles rund um die Programmierung mit Qt
Antworten
B-Barth
Beiträge: 5
Registriert: 18. Oktober 2007 18:02

externer Programmaufruf in einer Qt4-Application

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Warum C api wenn es QProcess gibt??
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
B-Barth
Beiträge: 5
Registriert: 18. Oktober 2007 18:02

Beitrag 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.
Antworten