Qtの基礎 - 終了処理

提供:MochiuWiki : SUSE, EC, PCB
2024年9月4日 (水) 00:12時点におけるWiki (トーク | 投稿記録)による版 (ページの作成:「== 概要 == <br><br> == コンソールアプリケーション == <code>QCoreApplication::quit()</code>メソッドおよび<code>QCoreApplication::exit()</code>において、<br> 両方ともアプリケーションを終了するために使用するが、動作と使用場面が異なる。<br> <br> 使用の指針を以下に示す。<br> * 一般的な状況では、<code>QCoreApplication::quit()</code>メソッドの使用を推奨する。<br>これは…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要



コンソールアプリケーション

QCoreApplication::quit()メソッドおよびQCoreApplication::exit()において、
両方ともアプリケーションを終了するために使用するが、動作と使用場面が異なる。

使用の指針を以下に示す。

  • 一般的な状況では、QCoreApplication::quit()メソッドの使用を推奨する。
    これは、イベントループを適切に終了して、保留中のイベントを処理する機会を与える。

  • QCoreApplication::exit()メソッドは、
    即座にアプリケーションを終了する必要がある場合 (例: クリティカルなエラーが発生した場合) や特定の終了コードを返す必要がある場合に使用する。

  • GUIアプリケーションでは、QCoreApplication::quit()メソッドの使用を推奨する。
    これにより、ウインドウを適切に閉じて、リソースをクリーンアップする機会が与えられる。

  • コンソールアプリケーションでは、QCoreApplication::quit()メソッドでもよいが、
    特定の終了コードが必要な場合は、QCoreApplication::exit()メソッドを使用することがある。


QCoreApplication::quit()

QCoreApplication::quit()メソッドは、シグナルとして実装されている。
非同期で動作して、イベントループを安全に終了させることができる。
(イベントループの次の反復時に処理される)

戻り値はない。

一般的に、スロットとして接続、または、QTimer::singleShot()と組み合わせて使用する。

以下の例では、QCoreApplication::quit()メソッドはシグナルとして動作するため、関数呼び出しは即座に戻り、次の行が実行される。
アプリケーションは次のイベントループの反復時に終了する。

 // 使用例
 
 #include <QCoreApplication>
 #include <QTimer>
 #include <iostream>
 
 void useQuit()
 {
    std::cout << "Calling quit()..." << std::endl;
    QCoreApplication::quit();
    std::cout << "This line will be executed." << std::endl;
 }
 
 int main(int argc, char *argv[])
 {
    QCoreApplication a(argc, argv);
 
    // QCoreApplication::quit()の例
    QTimer::singleShot(1000, useQuit);
 
    return a.exec();
 }


QCoreApplication::exit()

QCoreApplication::exit(int returnCode = 0)は、通常のメソッドとして実装されている。
同期的に動作して、イベントループを即座に終了させることができる。
(呼び出された時点で即座に処理される)

整数の戻り値を受け取り、それをアプリケーションの終了コードとして使用する。

特定の終了コードでアプリケーションを終了させる場合に使用する。

以下の例では、QCoreApplication::exit(0)メソッドが呼び出された直後にアプリケーションが終了するため、2番目のcout文は実行されない。

 #include <QCoreApplication>
 #include <iostream>
 
 void useExit()
 {
    std::cout << "Calling exit()..." << std::endl;
    QCoreApplication::exit(0);
    std::cout << "This line will NOT be executed." << std::endl;
 }
 
 int main(int argc, char *argv[])
 {
    QCoreApplication a(argc, argv);
 
    // QCoreApplication::exit()の例
    QTimer::singleShot(1000, useExit);
 
    return a.exec();
 }