2014-10-20 38 views
0

我已阅读关于将QProcess连接到信号插槽的问题,但是我为了如何实现自己的目的而丢失了一些信息。需要Qt/C++ - 跟踪所有QList <QProcess>

每QProcess中被存储在的QList

每QProcess中被移除时,他们到期,是否终止通过窗口或以其它方式。

当然,我会使用QObject :: connect()将它的信号连接到死亡和插槽。但我不知道告诉它给我正确的信息。

connect(process, SIGNAL(destroyed()), this, SLOT(ProcessEnd())); 

应该告诉我它是否被破坏。然而,如果通过窗口或应用程序本身以外的任何其他信号杀死信号,则无一例外。

+0

你可能有'QList ',对吧?我会以这种或那种方式解决这个问题,以避免在其中包含无效的代码。 – hyde 2014-10-20 17:18:39

回答

6

destroyed()是来自QObject的信号。该信号在物体被破坏之前立即发射,并且不能被阻挡,所以它不是你想要的。 QProcess有另一个信号finished()。尝试:

QList<QProcess*> proc; 
for (int i = 0; i < proc.size(); ++i) 
{ 
    connect(proc.at(i),SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(someSlot(int,QProcess::ExitStatus))); 
} 

From doc:当所述过程完成

这个信号被发射。 exitCode是退出 进程的代码(仅对正常退出有效),并且exitStatus为退出状态为 。该过程完成后, QProcess中的缓冲区仍然完好无损。您仍然可以读取在完成之前可能写入的任何数据。 如果进程无法启动,则返回-2。如果进程 崩溃,则返回-1。否则,返回的进程退出代码为 。

还有QProcess::NormalExit什么时候一切正常,QProcess::CrashExit程序崩溃。文档也包含有关ExitStatus的信息。