A. closeEvent() をオーバーライドする
ウィンドウが閉じられる直前に呼ばれます。
ここでダイアログを出して、終了をキャンセルできます。
例:終了確認ダイアログ
// MainWindow.h
protected:
void closeEvent(QCloseEvent *event) override;
// MainWindow.cpp
#include <QCloseEvent>
#include <QMessageBox>
void MainWindow::closeEvent(QCloseEvent *event)
{
auto ret = QMessageBox::question(
this,
"終了確認",
"アプリを終了しますか?",
QMessageBox::Yes | QMessageBox::No
);
if (ret == QMessageBox::Yes) {
event->accept(); // 終了OK
} else {
event->ignore(); // 終了キャンセル
}
}
B. QCoreApplication::aboutToQuit
終了をキャンセルすることはできません
処理だけしたい場合に使います。
connect(qApp, &QCoreApplication::aboutToQuit, this, [](){
qDebug() << "アプリ終了直前";
});