5

問題の解決策を見つけるのに苦労していますが、解決方法がわかりません。

私が作成したいくつかのプログラムのユーザー インターフェイスを作成しています (そのため、ボタンを押すだけで実行可能ファイルを開始できます)。だから私はqtを使うことを考えました。

だから私はQProcessについてたくさん読んで、それを使おうとしました。

私の最初の実行可能ファイルで、QProcess::start() で起動しようとしましたが、うまくいかなかったので、QProcess:execute() で試しました。

QProcess *proc = new QProcess(this);
QDir::setCurrent("C:\\DIRTOTHEEXE\\");
QString program="HELLO.exe";
proc->execute(program);

これは私のプログラムを完全に実行し、うまく機能します。

だから私は他のexeで同じことをしようとしましたが、うまくいきませんでした

QProcess *myproc = new QProcess(this);
QDir::setCurrent("C:\\DIRTOTHEEXE\\");
QString program="HelloWorld.exe";
myproc->start(program);

呼び出された実行可能ファイルは、単純に「Hello World」と出力して 0 を返します。

だから今私の質問は次のとおりです:この動作を引き起こす可能性があるのはなぜですか?最初の実行可能ファイルに QProcess::start() を使用できないのはなぜですか?

ところで:私は workingDirectory() をexeのパスに設定しようとしましたが、それもうまくいきませんでした。

誰かが私を助けてくれることを願っています。

編集:プログラムは実行されますが、1行を印刷した直後にクラッシュします。

編集: ここでは、HelloWorld ソースです。

#include <iostream>
using namespace std;

int main(int argc, char* argv[]) {
    cout<<"HELLO WORLD!!"<<endl;

    return 0;
}
4

1 に答える 1

6

QProcess には、次のような外部プロセスを開始するための 3 つの関数があります。

  • 始める
  • 実行する
  • startDetached

後の 2 つ、execute と startDetached は静的であるため、それらを呼び出すために QProcess のインスタンスは必要ありません。

start を使用する場合は、少なくとも waitForStarted() を呼び出して、プロセスを適切にセットアップする必要があります。execute() 関数はプロセスが終了するまで待機するため、waitForStarted を呼び出す必要はありません。

あなたは少量のコードしか投稿していないため、後で何をしようとしているのか正確にはわかりません. 終了する関数内のコードですか、それともプロセスの出力を取得しようとしていますか? その場合、start() を使用している場合は間違いなく waitForStarted を呼び出す必要があります。

プロセスが終了するのを待たずにプロセスを実行したいだけで、プログラムがプロセスとの対話に煩わされない場合は、startDetached を使用します。

QProcess::startDetached("C:\\DIRTOTHEEXE\\HELLO.exe");
于 2013-08-06T08:46:00.257 に答える