2010-07-15 7 views
5

In meiner Qt-GUI-Anwendung, ich rufe Sie die Eingabeaufforderung durch:Aufruf der Eingabeaufforderung von Qt-Anwendung ohne Einfrieren?

system("lots.exe & of.exe && commands.exe"); 

Es öffnet sich die Eingabeaufforderung nach oben (wie ich es will), aber friert die Qt-GUI-Anwendung, bis ich die Eingabeaufforderung zu schließen. Gibt es eine Möglichkeit, dies zu verhindern? Ich habe gesehen, dass es eine QProcess-Klasse gibt, aber sie kann die Eingabeaufforderung nicht aufrufen.

Jede Hilfe würde sehr geschätzt werden!

+0

Funktioniert "&&"? Ich würde erwarten, dass es nicht funktioniert, denn das sollte die Syntax der Shell sein (cmd.exe, bash, etc.) und QProcess behandelt das nicht. EDIT: dumm mir, das ist immer noch System() ... –

Antwort

7

QProcess ist wirklich die Antwort. Wenn Sie etwas wie system() verwenden möchten, müssen Sie entweder den Anruf in einen anderen Thread eingeben oder popen oder etwas Ähnliches für Ihre Plattformen verwenden.

QProcess hat die setReadChannel, die Sie verwenden könnten, um Ihr eigenes Konsolenfenster anzuzeigen, um die Ausgabe anzuzeigen.

1

Sie müssen diesen Systemaufruf nur in einem separaten Thread ablegen.

+2

Keine Notwendigkeit, das zu tun, wenn QProcess verfügbar ist. Außerdem würde es keine gute Möglichkeit geben, den Thread zu unterbrechen, während er in system() blockiert wurde, was zu Problemen führen könnte, wenn die zugrundeliegenden EXEs für eine lange Zeit (oder überhaupt nicht) –

+0

, was ein allgemeines Problem mit dem System ist (), Ich stimme zu :) –

1

Wenn Sie keine der Ausgaben benötigen, wäre der einfachste Weg die Verwendung von QProcess :: startDetached().

http://doc.qt.io/archives/4.6/qprocess.html#startDetached

Wenn Sie die Ausgabe benötigen, QtConcurrent :: mit einem futurewatcher laufen die Ausgabe enthält, wäre weniger Aufwand/Arbeit als QThread abzuleiten.

Verwandte Themen