4

ログインダイアログの.hファイルのcloseEvent関数をオーバーライドして、発行されたときにプログラムを終了するようにしました。

    void closeEvent(QCloseEvent *event){exit(0)}

ただし、クリックしたダイアログのどのボタンでもプログラムを終了するようです。右上隅の[x]ボタンをクリックした場合にのみ終了するにはどうすればよいですか?

4

1 に答える 1

6

closeEvent()は、ダイアログを閉じたいときに呼び出されます。明らかに、ダイアログの「OK」または「キャンセル」ボタンをクリックすると、ダイアログは閉じます。これは正常です。

また、closeEvent()に渡されるイベントは、受け入れるか無視する必要があります。アプリケーションをexit()するだけではいけません。例えば:

void closeEvent(QCloseEvent *event)
{
    if (The dialog should close)
        event->accept();
    else
        event->ignore(); // Don't close.
}

ウィンドウを閉じたい理由は関係ありません。ユーザーがウィンドウフレームの[OK]、[キャンセル]、または[X]ボタンをクリックしたかどうか。わかりません。近いイベントはまさにそれです。ウィンドウを閉じたい。

ダイアログが開いている最後のウィンドウである場合、QApplication :: exec()が戻り、プログラムは正常にシャットダウンします。

于 2012-11-16T21:36:12.050 に答える