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

Mar*_*rk 0 c++ bash user-interface qt qprocess

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

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

使用QProcess是一种更好的方法吗?如果是这样,我将如何开始?

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

Tho*_*ire 8

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

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

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()
});
Run Code Online (Sandbox Code Playgroud)

您可能还想捕获标准错误输出.你可以做一秒钟connect()或使用QProcess::setProcessChannelMode(QProcess::MergedChannels).

执行shell脚本QProcess应该可以正常工作,只要它们#! interpreter [optional-arg]在开头标记.这是因为QProcess内部使用fork+ execvp,并且该文档清楚地说明了shell脚本是允许的.

不要忘记QProcess在命令完成时删除你的命令.

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

听起来像是QPlainTextEdit的工作.或者,您可以使用较慢的QTextEdit,它带来了额外的功能.