📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

183行目: 183行目:


== 切り離されたプロセス ==
== 切り離されたプロセス ==
==== QProcess::startDetachedメソッド ====
Qt 5.10以降、<code>QProcess</code>クラスを使用して、プロセスを切り離して実行できる。<br>
Qt 5.10以降、<code>QProcess</code>クラスを使用して、プロセスを切り離して実行できる。<br>
<br>
<br>
<code>QProcess</code>クラスを使用して<u>プロセスを切り離さずに実行する(<code>start</code>メソッドや<code>execute</code>メソッド等)</u>場合、<code>QProcess</code>クラスのデストラクタがプロセスを終了する。<br>
<code>start</code>メソッドや<code>execute</code>メソッドでは、プロセスを切り離さずに実行するため、<code>QProcess</code>クラスのデストラクタがプロセスを終了する。<br>
これに対して、切り離されたプロセスは、呼び出したプロセスが終了しても影響を受けずに実行し続ける。<br>
これに対して、切り離されたプロセスは、呼び出したプロセスが終了しても影響を受けずに実行し続ける。<br>
<br>
<br>
251行目: 252行目:
* <code>setStandardOutputFile</code>メソッド
* <code>setStandardOutputFile</code>メソッド
* <code>setWorkingDirectory</code>メソッド
* <code>setWorkingDirectory</code>メソッド
<br>
==== プロセスの完了を検知 ====
<code>QProcess::startDetached</code>メソッドを使用した場合、プロセスの完了通知を直接受け取ることはできない。<br>
これは、<code>QProcess::startDetached</code>メソッドはデタッチ (切り離し) されたプロセスを起動するため、親プロセス (アプリケーション) との接続が切られるためである。<br>
<br>
そのため、QProcess::startDetachedメソッドは使用せずに、QProcessクラスのstartメソッドをバッググラウンドで実行する必要がある。<br>
<br>
<syntaxhighlight lang="c++">
// プロセスを定義
QProcess *process = new QProcess(this);
process->setProgram("aplay");
process->setArguments(QStringList() << "Sample.wav");
// プロセスを非同期実行 (バックグラウンド) で実行しつつ、完了通知を受け取る
connect(process, &QProcess::finished, this, [=](int exitCode, QProcess::ExitStatus exitStatus) {
    // 完了時の処理
    process->deleteLater();  // メモリリーク防止
    // 何らかの処理
    // ...略
});
process->start();
</syntaxhighlight>
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:Qt]]
[[カテゴリ:Qt]]