如何从bash脚本中捕获终端输出并将其显示在我的Qt UI中?

时间:2018-05-01 15:39:21

标签: c++ bash qt user-interface qprocess

我编写了一个简单的GUI,引导用户完成签出/签入过程,然后在用户单击GUI按钮时运行bash脚本。

我想在GUI中创建一个字段并显示脚本的输出。现在我正在使用system()(stdio)来运行脚本,但是将脚本的输出传递给我gui中的文本字段似乎很乱。

使用QProcess会更好吗? 如果是这样,我将如何开始?

另外,你会推荐什么Qt Widget /容器?

1 个答案:

答案 0 :(得分:8)

  

使用QProcess会更好吗?如果是这样,我将如何开始?

通过查看QProcess documentation,您可以执行与此类似的操作:

QString program = "/usr/bin/ls";
QStringList arguments{"-lahR"};
QProcess *myProcess = new QProcess(parent);
myProcess->start(program, arguments);
connect(myProcess, &QProcess::readyReadStandardOutput, [myProcess] {
  qDebug() << "Got output from process:" << myProcess->readAllStandardOutput();
  // Or copy the data to QPlainTextEdit::appendPlainText()
});

您可能还想捕获标准错误输出。您可以执行一秒connect()或使用QProcess::setProcessChannelMode(QProcess::MergedChannels)

使用QProcess执行shell脚本应该可以正常工作,只要它们在开头标有#! interpreter [optional-arg]即可。这是因为QProcess内部使用fork + execvp,而documentation for that明确指出允许使用shell脚本。

当命令完成时,不要忘记删除QProcess

  

另外,你会推荐什么Qt Widget /容器?

听起来像QPlainTextEdit的工作。或者,您可以使用较慢的QTextEdit,这会带来更多功能。