У меня есть программа с графическим интерфейсом, которая запускает программу Cli нажатием кнопки. Я хочу видеть окно консоли и не нужно ждать окончания программы Cli. Поэтому я использую такой код:
QProcess::startDetached("cmd.exe");
После нажатия кнопки я не вижу консольного окна. Но посмотрите процесс cmd.exe в диспетчере задач.
Я попытался использовать команду system (), но она остановила мое приложение до завершения программы cli.
Есть ли способ сделать окно видимым?
Это ожидаемое поведение. По крайней мере в винде startDetached
эквивалентно звонку CreateProcess
с DETACHED_PROCESS
флаг, где новый процесс не наследует консоль своего родителя. Имеет смысл, что на других платформах метод будет делать что-то подобное.
В этом случае вам пришлось бы вручную выделить новый, используя AllocConsole
в новом процессе (помните, что вам может потребоваться перенаправить потоковые дескрипторы на новую консоль) или попробуйте запустить процесс другим способом (проверьте CreateProcess
или же fork
).
Кстати, причина system
замораживает ваше приложение, потому что это синхронный вызов, поэтому он не вернет управление, пока не завершится другой процесс. Вы можете попробовать позвонить system
из отдельного потока, и таким образом вы избегаете блокирования основного цикла событий вашего приложения.
Других решений пока нет …