Externe Konsolenanwedung aus QT starten

Alles rund um die Programmierung mit Qt
Antworten
Ragan
Beiträge: 10
Registriert: 9. Dezember 2010 11:43

Externe Konsolenanwedung aus QT starten

Beitrag von Ragan »

Hallo allerseits,

ich bin relativ neu was Qt betrifft, schlage mich aber ganz gut soweit. Nun habe ich allerdings folgendes Problem. Ich habe in Visual Studio 2010 eine Konsolenanwedung gschrieben und als .exe kompiliert. Diese benötigt eine .txt Datei, deren Daten verarbeitet und im Konsolenfenster ausgegeben werden. Per Doppelklick lässt sich die .exe in Windows 7 wunderbar startet und erledigt was sie soll.

Nun würde ich diese .exe gerne aus einer Qt-Applikation starten. Ich habe es bisher mit QProcess folgendermaßen versucht:

QProcess *process = new QProcess();
process->startDetached("ittp.exe");

Ergebnis: Konsole blinkt kurz auf, reagiert dann aber nicht mehr und muss beendet werden.

QProcess *process = new QProcess();
process->start("ittp.exe");

Ergebnis: Nichts passiert

QProcess *process = new QProcess();
process->startDetached("path\to\exe\ittp.exe");

Funktioniert, aber ich möchte eine relative Pfadangabe benutzen, keine vorgeschriebene.


Ein Problem is weiterhin, dass wenn die .exe ausgeführt wird, sie nicht auf die .txt zugreift, obwohl sich diese im selben Verzeichnis befindet. Unter Windows klappt das wie gesagt.

Ich hoffe mir kann jemand helfen :)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Liegt das executable im Pfad?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Ragan
Beiträge: 10
Registriert: 9. Dezember 2010 11:43

Beitrag von Ragan »

liegt im Debug-Verzeichnis des Projektordners, da wo auch die Qt-executable liegt
Ragan
Beiträge: 10
Registriert: 9. Dezember 2010 11:43

Beitrag von Ragan »

QString secApp = qApp->applicationDirPath()+"/ittp.exe";
process->startDetached(secApp);

so funktioniert es, aber wenn ich es als Release kompiliere, und dann alles in irgendein verzeichnis kopiere, nicht mehr :(
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ein Executable muss im Pfad liegen oder mit absoluten Pfad gestartet werden. Wenn Du das Executable mitlieferst kannst Du ja mit Hilfe von applicationDirPath() den absoluten Pfad erzeugen. Wenn es irgendwo im System vorhanden ist muss der User den Pfad angeben.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Zu allererst: QProcess::startDetached() ist eine STATISCHE Funktion, du brauchst dafür keine QProcess-Instanz.
so funktioniert es, aber wenn ich es als Release kompiliere, und dann alles in irgendein verzeichnis kopiere, nicht mehr
Kopierst du auch die ittp.exe mit?
Ragan
Beiträge: 10
Registriert: 9. Dezember 2010 11:43

Beitrag von Ragan »

ja, ich ziehe die Qt-Apllikation aus dem ReleaseOrdner in einen anderen Ordner, da kommen noch einige dlls und die ittp.exe mit rein...

edit: es klappt, wenn der pafd keine leerzeichen enthält!
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Was heißt "funktioniert nicht"? Wie startest du dein Qt-Programm?
Du kannst dein ittp.exe ein Log schreiben lassen, damit du siehst wo es hängt.
Du kannst auch statt startDetached() mit deinem QProcess kommunizieren. QProcess hat SIGNALS, auf die du reagieren kannst (readyReadyStandardOutput() etc). Steht in der Doku unter "Communicating via Channels". Dann kannst du auch via cout/cerr/... in deiner ittp.exe arbeiten.
Ragan
Beiträge: 10
Registriert: 9. Dezember 2010 11:43

Beitrag von Ragan »

Besten Dank für die Antworten, mit startDetached klappt es nun ganz gut...manchmal funktioniert die ittp.exe nicht mehr, aber ich denke das muss eher an Visual Studio bzw der kompilierzng liegen, da hake ich mal nach..

also besten Dank :)
Antworten