首页 > 解决方案 > 开始调用后发出的QProcess信号?

问题描述

在对象start()上调用之后QProcess,可以遵循的信号发射序列是什么startederrorOccurredfinished

started信号总是发射吗?finished信号总是发射吗?三个信号中至少有一个总是发射吗?如果errorOccurred发射,可以在它之后发射一个startedfinished信号吗?)

标签: c++qt

解决方案


当您为 QProcess 对象调用 start() 时,一旦您的进程启动,就会发出启动信号。如果您的流程中发生任何错误,errorOccurred将发出,并且在您的流程完成后,将调用完成的信号。但是 Finished 信号总是在几秒钟后发出,因此如果您需要运行一系列命令,您可以使用更快的方式而不是使用如下所示的 finished 信号:

QProcess *system_command = new QProcess();
system_command->start("/bin/bash");
system_command->waitForFinished(500);
system_command->write("ls -a\n");

更新:

不,顺序并不总是相同的。如果您的进程成功启动并且没有返回错误,它将发出启动信号。现在,如果您的进程运行的程序未完成或正在等待某个命令,则在该进程成功完成之前不会发出完成的信号(它可能永远不会发出完成的信号)。

如果您的进程遇到错误,errorOccured将发出,但启动完成信号不会发出。

例子:

如果您使用 QProcess 运行 bash,它只会发出启动信号,而永远不会发出完成信号。因为它正在等待其他命令。

system_command->start("/bin/bash");

但是,如果您使用要立即运行的所有命令运行 bash,它将运行并发出完成信号(如果没有发生错误)。

readtimedatectl->start("/bin/sh", QStringList() << "-c" << "timedatectl");

推荐阅读