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 に答える