Quit-application-action-with-do-no-show-again-option

From Qt Wiki
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();
}