0

我有一个插槽,称为传递 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();
}
4

2 回答 2

4

您可以使用 QString 队列来排队您的命令并存储它们。然后,从队列的顶部开始,启动一个新进程并将其finished() 信号连接到一个槽。当该进程完成时,如果队列不为空,则启动一个新进程,依此类推。

于 2011-01-17T12:39:43.237 回答
0

函数的正确签名finished是;

void QProcess::finished ( int exitCode, QProcess::ExitStatus exitStatus )

所以你应该像这样连接;

connect(p, SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(ExecFinished()));
于 2011-01-17T15:40:53.573 回答