【发布时间】:2021-07-12 12:37:59
【问题描述】:
这就是我想做的。
我有一个脚本,目前刚刚开始打印一条消息。等待 5 秒并打印另一条消息,然后要求用户按任意键结束。
我有一个 Qt 应用程序需要调用这个脚本然后退出。
我希望控制台窗口打开以显示,脚本文本和这个新进程能够在 Qt 应用程序完成后继续。
在 Windows 中,我的脚本称为“update.bat”
所以我试过了:
QProcess::startDetached("update.bat");
QCoreApplication::quit();
但是控制台(Windows 1)没有打开(所有输出都在 QtCreator 中),并且在应用程序完成后它肯定不会继续。
有没有办法使用 Qt 做到这一点?
如果可能的话,我不想依赖 Windows 中的 CreateProcess,并使用 Qt 解决方案。
编辑:
我还尝试了 setCreateProcessArgumentModifier 并使用 cmd /k 启动 update.bat 脚本。所有这一切的结果都是一样的。输出被重定向到 QtCreator 控制台,当在 Qt 之外执行应用程序时没有任何反应(这一切都是在您按下按钮时发生的)。
QProcess p;
// QProcess process;
// process.setCreateProcessArgumentsModifier([] (QProcess::CreateProcessArguments *args)
// {
// args->flags |= CREATE_NEW_CONSOLE;
// args->startupInfo->dwFlags &= ~STARTF_USESTDHANDLES;
// args->startupInfo->dwFlags |= STARTF_USEFILLATTRIBUTE;
// args->startupInfo->dwFillAttribute = BACKGROUND_BLUE | FOREGROUND_RED
// | FOREGROUND_INTENSITY;
// });
p.startDetached("cmd.exe",QStringList() << "/k" << "update.bat");
【问题讨论】:
-
尝试在 Qt-Creator 之外运行您的应用程序。我在 Windows 上的 Qt 应用程序开发中没有使用 Qt-Creator,我得到了控制台窗口。
-
我试过了。当我按下按钮触发上述代码时,什么也没有发生。这应该有效吗?
-
也许你需要
cmd /k update.bat -
也试过了。还是什么都没有。
-
我忘记了我通常在 GUI 应用程序中使用 QProcess 来提取生成的控制台应用程序的输出并将其显示在 QTextBox 或类似文件中。相关:https://doc.qt.io/qt-5/qprocess.html#readAllStandardOutput