📢 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>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]] | ||