Seite 1 von 1

Externe Konsolenanwedung aus QT starten

Verfasst: 9. Dezember 2010 16:10
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 :)

Verfasst: 9. Dezember 2010 16:52
von Christian81
Liegt das executable im Pfad?

Verfasst: 9. Dezember 2010 16:58
von Ragan
liegt im Debug-Verzeichnis des Projektordners, da wo auch die Qt-executable liegt

Verfasst: 9. Dezember 2010 16:59
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 :(

Verfasst: 9. Dezember 2010 17:02
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.

Verfasst: 9. Dezember 2010 17:05
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?

Verfasst: 9. Dezember 2010 17:11
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!

Verfasst: 9. Dezember 2010 17:23
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.

Verfasst: 9. Dezember 2010 17:27
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 :)