2011-01-17 10 views
0

QProcessで使用されるいくつかの引数を渡すというスロットがあります。 私はこの引数のいくつかを使って外部プログラムを実行します。 問題は、前のプロセスが次のプロセスを開始するまで待って、これらのプロセスのキューを作成したいということです。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); 
} 

EDITソリューションあなたはそれが必要な場合は、: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

start()のQStringListオーバーロードを区切った引数で使用することを強くお勧めします。それ以外の場合は、すぐに引用の問題にぶつかります(たとえば、実行するプログラムにそのパスにスペースがある場合など)。 QStringList()バージョンでは自動的に引用が行われます。 –

+0

完成した信号を間違って使用しています。下記の私の答えをご覧ください。 – ismail

答えて

4

QStringキューを使用すると、コマンドをキューに入れて格納できます。次に、キューの先頭から開始し、新しいプロセスを開始し、finished()シグナルをスロットに接続します。そのプロセスが終了したら、キューが空でなければ新しいプロセスを開始します。

0

finishedの正しい署名は、です。

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

このように接続する必要があります。

関連する問題