Quit-application-action-with-do-no-show-again-option
Jump to navigation
Jump to search
Usually applications have a Quit action in the context menu. The following code will show a question dialog to the user to make sure that she really wants to quit. There is also an option to supress this message.
void MainWindow::on_actionQuit_triggered() {
bool exit = false;
QSettings settings;
settings.beginGroup("MainWindow");
if (settings.value("quitWithoutPrompt").toBool()) {
exit = true;
} else {
QMessageBox quitQuestion;
QCheckBox checkBox;
checkBox.setText(tr("Do not ask again"));
quitQuestion.setCheckBox(&checkBox);
quitQuestion.setText(tr("Do you really want to exit this program?"));
quitQuestion.setWindowTitle(tr("Are you sure?"));
quitQuestion.setStandardButtons(QMessageBox::No | QMessageBox::Yes);
quitQuestion.setDefaultButton(QMessageBox::No);
quitQuestion.exec();
if (quitQuestion.result() == QMessageBox::Yes) {
settings.setValue("quitWithoutPrompt", checkBox.isChecked());
exit = true;
}
}
settings.endGroup();
if (exit) {
QCoreApplication::quit();
}
}
To reenable this message you will need to clear the mainwindow/quitWithoutPrompt key trough the default QSettings. The following code can be used do do that:
void MainWindow::setQuitQuestinEnabled()
{
QSettings settings;
settings.beginGroup("MainWindow");
settings.setValue("quitWithoutPrompt", false);
settings.endGroup();
}