Konsolenanwendung von GUI-Anwendung mit Konsole starten
Verfasst: 30. April 2014 11:03
Hallo, ihr Lieben,
ich suche seit gestern und bin bereits auf ähnliche Fälle gestoßen, allerdings war ich auf noch keinen Lösungsweg gestoßen.
Ich habe ein Programm, welches durch Textboxes und Settings und anderen Quellen Parameter bestimmt, diese Parameter sollen dann einen rechnenden Programm weitergegeben werden. Es kann hierbei jeweils ein Preprocessing (wo kommen die Daten her?) als auch ein Postprocessing (was passiert mit dem Ergebnis?) erfolgen. Ist ein solcher "Task" abgeschlossen, startet ein weiterer Task etc.
Es dreht sich hierbei also eigentlich alles um Parameterübergaben und Parameterspeicherungen.
Damit das Ganze vorstellbarer ist, nehmen wir mal an, wir haben kein Preprocessing, dann haben wir noch einen gespeicherten Wert von "5" und nun übergeben wir dem Hauptprogramm die Zahlen 3 und 4. Das Hauptprogramm macht nichts anderes als zu Addieren und das Postprocessingprogramm tut nichts anderes als das Ergebnis und den bereits gespeicherten Wert zu multiplizieren. Also Hauptprogramm "3+4=7", Postprocessing "5*7=35". Ich denke damit sollte der Sinn da sein.
Ich habe einen QProcess eingerichtet und es funktioniert erfolgreich den Process mit startDetached() zu starten. Da allerdings startDetached() eine komplett neue Instanz startet, dürfte mir das Ganze überhaupt nicht weiterhelfen, da ich den Zugriff brauche. Mit execute() wurde mir nun immerhin der Inhalt der Konsole im Debugfenster des QT-Creators angezeigt, cin-Eingaben scheint dies nicht zu akzeptieren. Ohne Start vom QT-Creator wird gar nichts angezeigt und das Hauptprogramm hängt sich auf (wahrscheinlich, weil es auf Eingabe wartet vom anderen Prozess), wahrscheinlich kann man hier über QDebug etwas anzeigen lassen, wirkt aber für mich nicht nach einer wirklichen Lösung.
Somit denke ich, dass start() wahrscheinlich für diese Anzeige notwendig ist und das nutze ich nun auch. Hier können wohl die Daten eingelesen werden und er öffnet auch im Hintergrund einmal einen cmd.exe-Process und einen conhost.exe-Prozess, allerdings SEHE ich keine Konsole und kann im konkreten Beispiel keine Eingaben machen.
waitForFinished scheint zu klappen, es gibt nur kein Finish... ich bin mir ebenfalls unsicher, wie ich die Ausgaben des Programms nun korrekt nutzen kann.
Der Haken für "im Terminal ausführen", bringt nix außer ein LEERES Konsolenfenster. Könnt ihr mir helfen? Ich schätze es ist eigentlich gar nicht so schwer zu lösen...
Spezifikation:
Derzeit läuft das Programm auf RHEL 6 mit QT 4.6.2, Windows 7 mit QT 4.8.5 und Windows 7 mit QT 5.2.1 absolut problemlos, soll aber wahrscheinlich nur sowohl in Linux und Windows für 4.8.5 lauffähig sein.
Liebe Grüße!
ich suche seit gestern und bin bereits auf ähnliche Fälle gestoßen, allerdings war ich auf noch keinen Lösungsweg gestoßen.
Ich habe ein Programm, welches durch Textboxes und Settings und anderen Quellen Parameter bestimmt, diese Parameter sollen dann einen rechnenden Programm weitergegeben werden. Es kann hierbei jeweils ein Preprocessing (wo kommen die Daten her?) als auch ein Postprocessing (was passiert mit dem Ergebnis?) erfolgen. Ist ein solcher "Task" abgeschlossen, startet ein weiterer Task etc.
Es dreht sich hierbei also eigentlich alles um Parameterübergaben und Parameterspeicherungen.
Damit das Ganze vorstellbarer ist, nehmen wir mal an, wir haben kein Preprocessing, dann haben wir noch einen gespeicherten Wert von "5" und nun übergeben wir dem Hauptprogramm die Zahlen 3 und 4. Das Hauptprogramm macht nichts anderes als zu Addieren und das Postprocessingprogramm tut nichts anderes als das Ergebnis und den bereits gespeicherten Wert zu multiplizieren. Also Hauptprogramm "3+4=7", Postprocessing "5*7=35". Ich denke damit sollte der Sinn da sein.
Ich habe einen QProcess eingerichtet und es funktioniert erfolgreich den Process mit startDetached() zu starten. Da allerdings startDetached() eine komplett neue Instanz startet, dürfte mir das Ganze überhaupt nicht weiterhelfen, da ich den Zugriff brauche. Mit execute() wurde mir nun immerhin der Inhalt der Konsole im Debugfenster des QT-Creators angezeigt, cin-Eingaben scheint dies nicht zu akzeptieren. Ohne Start vom QT-Creator wird gar nichts angezeigt und das Hauptprogramm hängt sich auf (wahrscheinlich, weil es auf Eingabe wartet vom anderen Prozess), wahrscheinlich kann man hier über QDebug etwas anzeigen lassen, wirkt aber für mich nicht nach einer wirklichen Lösung.
Somit denke ich, dass start() wahrscheinlich für diese Anzeige notwendig ist und das nutze ich nun auch. Hier können wohl die Daten eingelesen werden und er öffnet auch im Hintergrund einmal einen cmd.exe-Process und einen conhost.exe-Prozess, allerdings SEHE ich keine Konsole und kann im konkreten Beispiel keine Eingaben machen.
Code: Alles auswählen
QProcess *myProcess = new QProcess(this);
myProcess->start(program, arguments);
myProcess->setReadChannel(QProcess::StandardOutput);
//myProcess->start("new.exe"); Versuch des direkten Starts einer Konsolenanwendung
//myProcess->start("C:\\Windows\\System32\\cmd.exe /k new.exe"); Versuch erst die CMD zu öffnen
myProcess->waitForFinished(-1);Der Haken für "im Terminal ausführen", bringt nix außer ein LEERES Konsolenfenster. Könnt ihr mir helfen? Ich schätze es ist eigentlich gar nicht so schwer zu lösen...
Spezifikation:
Derzeit läuft das Programm auf RHEL 6 mit QT 4.6.2, Windows 7 mit QT 4.8.5 und Windows 7 mit QT 5.2.1 absolut problemlos, soll aber wahrscheinlich nur sowohl in Linux und Windows für 4.8.5 lauffähig sein.
Liebe Grüße!