关于使用Qt的QProcess,我遇到了一些问题 . 我已将以下函数与按钮的onClick事件相关联 . 基本上,我想在单击此按钮时执行另一个文件,并在我的Qt程序上获取其输出 . 此文件 calculator
执行,显示一些输出,然后等待用户的输入 .
void runPushButtonClicked() {
QProcess myprocess;
myprocess.start("./calculator")
myprocess.waitForFinished();
QString outputData= myprocess.readStandardOutput();
qDebug() << outputData;
}
在一个场景中,当 calculator
是这样一个只输出一些结果并最终终止的文件时,这是完美的 . 但是,如果计算器在输出一些结果后等待用户的某些进一步输入,我的 outputData
中什么也得不到 . 事实上, waitForFinished()
会超时,但即使我删除 waitForFinished()
, outputData
仍然是空的 .
我已经在SO上尝试了一些可用的解决方案,但是无法处理这种情况 . 任何指导将不胜感激 .
1 回答
我建议你设置一个信号处理程序,当子进程产生输出时调用它 . 例如 . 你必须连接到readyReadStandardOutput .
然后,您可以在子流程需求输入时发现并发送所需的输入 . 这将在
readSubProcess()
中完成 .main.cpp
在下面,启动子进程并检查输入 .
calculator
程序完成后,主程序也会退出 .Foo.h
对于子进程 calculator ,使用了一个简单的脚本 . 您可以看到生成输出的位置以及预期输入的位置 .
如果您不需要在主进程中执行任何其他操作(例如,显示GUI,管理其他线程/进程....),最简单的方法是在创建子进程后的循环中的
sleep
,然后像readSubprocess
.