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

How can I capture terminal output from a bash script and display it in my Qt UI?

本文关键字:显示 我的 Qt UI bash 脚本 输出 终端      更新时间:2023-10-16

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

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

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

另外,您会推荐哪种Qt小部件/容器?

使用 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()
});

您可能还希望捕获标准错误输出。您可以执行第二次connect()或使用QProcess::setProcessChannelMode(QProcess::MergedChannels)

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

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

另外,您会推荐哪种Qt小部件/容器?

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