1

奇妙な問題が発生しました。QProcessが機能していません!

そしてエラーは不明です。

ヘッダーにグローバル変数を取得しました

QProcess *importModule;

An私はこの機能を手に入れました(私は両方startstartDetached方法を試しました)

    void App::openImport(){
      importModule = new QProcess();
      importModule->setWorkingDirectory(":\\Resources");
      importModule->startDetached("importdb_module.exe");
      QMessageBox::information(0,"",importModule->errorString());
}

それはそれを出力しerror is unknownます。また、次のような他のexeを起動しません

    void App::openImport(){
      importModule = new QProcess();
      importModule->setWorkingDirectory("C:\\Program Files\\TortoiseHg");
      importModule->startDetached("hg.exe");
      QMessageBox::information(0,"",importModule->errorString());
}

私が間違ったことをしましたか?.exeそして、私のプログラムからいくつかを実行する他の方法はありますか? それとも.batファイル(exeを実行する)ですか?(QProcessでも試しましたが、動作しません)

4

1 に答える 1

3

startDetached()は静的メソッドであり、まったく動作しませんimportModule。プロセスを開始してから、ケアを停止します。したがって、 error()/errorState()は呼び出しimportModuleとは関係ありません。startDetached()あなたが欲しいのはですstart()。ただし、QProcess は非同期であるため、start() が戻った直後はまだ何も起こりません。結果を知るには、信号と信号にstarted()接続error()する必要があります。finished()

connect(importModule, SIGNAL(started()), this, SLOT(importModuleStarted()));
connect(importModule, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(importModuleFinished(int, QProcess::ExitStatus)));
CONNECT(importModule, SIGNAL(error(QProcess::ProcessError)), this, SLOT(importModuleError(QProcess::ProcessError)));
importModule->start(QStringLiteral("importdb_module"), QStringList());

または、ブロッキング待機関数を使用できます。

importModule->start(QStringLiteral("importdb_module"), QStringList());
importModule->waitForStarted(); // waits until starting is completed
importModule->waitForFinished(); // waits until the process is finished

ただし、UI をブロックするため、メイン スレッドで使用しないことを強くお勧めします。

于 2013-11-09T08:39:40.913 に答える