QProcess::startDetached() 不显示控制台 window

QProcess::startDetached() not show console window

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

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

单击按钮后我没有看到控制台 window。但是在任务管理器中查看 cmd.exe 进程。

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

有什么方法可以让 window 可见吗?

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

在这种情况下,您必须使用 AllocConsole on the new process (be aware that you may need to redirect the streaming handles to the new console), or try to start the process in a different way (check CreateProcess or fork).

手动分配一个新的

顺便说一句,system 冻结您的应用程序的原因是因为它是一个同步调用,所以它不会 return 控制直到另一个进程完成。您可以尝试从单独的线程调用 system,这样可以避免阻塞应用程序的主事件循环。