QProcessで外部プログラムの実行
外部プログラムを独立したプロセスとして実行したい場合はQPorcessからプロセスを起動できます。
起動方法には子プロセスとして起動するか独立して起動するかの2つがあります。
子プロセスとして起動
startを使う場合はプロセスは呼び出し元のプロセスが終了すると自動的に終了します。
例えばこんなMyAppというプログラムを起動したい場合は次のようにします。
QProcess process; QStringList options; options << "-h"; process.start("MyApp", options);
2つめの引数にはコマンドにオプションが渡せるのでコンソールで次のコマンドを打つのと同じです。
MyApp -h
もし同じプログラムを2重起動したくない場合はこうすればOKです。
QProcess process;
process.start("MyApp -h");
完全に独立したプロセスを作るには
先ほど紹介したstartを使う方法は親プロセスが終了すると自動的に消滅してしまいます。
そこで独立したプロセスを作るにはstartDetached関数を使います。
使い方はstart関数とほとんど変わりません。
QStringList options; option << "-h" if(!QProcess::startDetached("MyAPp", options)){ qCritical() << "Cannot start program"; }
startDetachedはstaticな関数でプログラムの起動に成功するとtrueを返してきます。
こうして作ったプロセスは呼び出し元のプロセスが終了しても独立して動き続けることができます。
まとめ
今まで書いてきたことをまとめると
- 子プロセスを作るにはstart関数を使う。
- 独立したプロセスを作るにはstartDetached関数を使う。
という風に用途に応じてこの2つを使い分ければ良さそうです。
以上、プロセスからプログラムを起動する方法でした。
では、また!
関連項目
© Kaz