我有一个名为传递QProcess中使用的参数的插槽。 我用一些参数执行一个外部程序。 问题是我想为这些进程建立一个队列,等待上一个进程完成以启动下一个进程。
您认为最好/最简单的方式是什么?
这是我的方法/插槽:
void FirstCase::CallApp(QString text, QString pathAndFileName)
{
QString command = QString("App1.exe %1 -Z %2").arg(pathAndFileName).arg(message);
QProcess* process = new QProcess(this);
process->start(command);
}
编辑如果您需要,请在此解决方案:
遵循QStringList的想法,我的CallApp方法只是将命令添加到QStringList,如:
list << command;
然后调用Execute();
void FirstCase::Execute()
{
if(!list_.isEmpty()&&!executing_)
{
QProcess* p = new QProcess(this);
QString c = list_.takeFirst();
p->start(c);
executing_=TRUE;
connect(p, SIGNAL(finished(int)),this,SLOT(ExecFinished()));
}
}
void FirstCase::ExecFinished()
{
executing__=FALSE;
Execute();
}
答案 0 :(得分:4)
您可以使用QString队列来排队命令并存储它们。然后,从队列顶部开始,启动一个新进程并将其finished()信号连接到一个插槽。当该进程完成时,如果队列不为空,则启动新进程,等等。
答案 1 :(得分:0)
finished
函数的正确签名是;
void QProcess::finished ( int exitCode, QProcess::ExitStatus exitStatus )
所以你应该像这样连接;
connect(p, SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(ExecFinished()));