1. ホーム
  2. c++

[解決済み] Qt: ユーザが 'X' (閉じる) ボタンを押したときのイベントはどのように処理すればよいですか?

2022-05-14 01:10:28

質問

Qtを使用してアプリケーションを開発しています。ユーザーがウィンドウフレームの'X'(閉じる)ボタンをクリックしたときのイベント、つまりこのボタンに対応するスロットがわかりません。

このためのスロットがない場合、ユーザーが閉じるボタンを押した後に機能を開始できるような、他の方法をどなたか教えていただけませんか。

どのように解決するのですか?

もし QMainWindow を上書きすることができます。 closeEvent メソッドをオーバーライドします。

#include <QCloseEvent>
void MainWindow::closeEvent (QCloseEvent *event)
{
    QMessageBox::StandardButton resBtn = QMessageBox::question( this, APP_NAME,
                                                                tr("Are you sure?\n"),
                                                                QMessageBox::Cancel | QMessageBox::No | QMessageBox::Yes,
                                                                QMessageBox::Yes);
    if (resBtn != QMessageBox::Yes) {
        event->ignore();
    } else {
        event->accept();
    }
}



をサブクラス化する場合 QDialog を使用する場合、その closeEvent は呼び出されないので、オーバーライドする必要があります。 reject() :

void MyDialog::reject()
{
    QMessageBox::StandardButton resBtn = QMessageBox::Yes;
    if (changes) {
        resBtn = QMessageBox::question( this, APP_NAME,
                                        tr("Are you sure?\n"),
                                        QMessageBox::Cancel | QMessageBox::No | QMessageBox::Yes,
                                        QMessageBox::Yes);
    }
    if (resBtn == QMessageBox::Yes) {
        QDialog::reject();
    }
}