In the header of the mainwindow class (closeEvent must be virtual):
public:
virtual void closeEvent ( QCloseEvent * event );
Then in cpp
void MainWindow::closeEvent( QCloseEvent *event )
{
event->ignore();
if(!EntitiesSaverObserver::Instance()->isAllSaved())
{
QMessageBox msgBox;
msgBox.setWindowIcon(QIcon(":/Resources/Icons/warning.png"));
msgBox.setIconPixmap(QPixmap(":/Resources/Icons/warning.png"));
QString strToShow = QString("Some Entities has been created or modified...");
msgBox.setText(strToShow);
msgBox.setInformativeText("Do you want to save your changes?");
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Save);
int ret = msgBox.exec();
switch (ret) {
case QMessageBox::Save:
{
qDebug() << "SAVE";
event->accept();
break;
}
case QMessageBox::Discard:
{
qDebug() << "DISCARD";
event->accept();
break;
}
case QMessageBox::Cancel:
{
qDebug() << "CANCEL";
break;
}
default:
break;
}
} else {
event->accept();
}
}
In addition, if you want to place the button on the toolbar as a QAction, you can connect a signal, and then:
void MainWindow::on_actionExit_triggered()
{
close();
}
This will trigger a close event on your main window. Hope this helps you.
source
share