我编写了一个简单的GUI,引导用户完成签出/签入过程,然后在用户单击GUI按钮时运行bash脚本。
我想在GUI中创建一个字段并显示脚本的输出。现在我正在使用system()
(stdio)来运行脚本,但是将脚本的输出传递给我gui中的文本字段似乎很乱。
使用QProcess
会更好吗?
如果是这样,我将如何开始?
另外,你会推荐什么Qt Widget /容器?
答案 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,这会带来更多功能。