QProcess :: startDetached()不显示控制台窗口

时间:2017-02-15 19:58:47

标签: c++ windows qt command-prompt qt5.8

我有一个GUI程序,通过单击按钮启动cli程序。我想看到控制台窗口,不需要等到cli程序结束。所以我使用这样的代码:

QProcess::startDetached("cmd.exe");

单击按钮后,我看不到控制台窗口。但请参阅任务管理器中的cmd.exe进程。

我尝试使用system()命令,但它在cli程序结束前冻结我的应用程序。

有没有办法让窗口可见?

1 个答案:

答案 0 :(得分:-1)

这是预期的行为。至少在Windows中startDetached相当于使用DETACHED_PROCESS标志调用CreateProcess,新进程不会继承其父控制台。有意义的是,在其他平台上,该方法可以做类似的事情。

在这种情况下,您必须在新进程上使用AllocConsole手动分配一个新进程(请注意,您可能需要将流式处理程序重定向到新控制台),或尝试启动该过程采用不同的方式(选中CreateProcessfork)。

BTW,system冻结你的应用程序的原因是因为它是一个同步调用,所以它不会返回控件直到另一个进程完成。您可以尝试从单独的线程调用system,这样就可以避免阻止应用程序的主事件循环。