ドキュメントを閉じる前に

編集中のドキュメントを保存しないで閉じる際、「保存しますか? (Yes/No/Cancel)」的な警告を出すのがアプリケーションのおもてなしです。Qtでは、closeEventをオーバーライドする事で実現可能です。

void FormChild::closeEvent( QCloseEvent* event )
{
  // ドキュメントが変更されている場合の警告
  QMessageBox::StandardButton res = QMessageBox::question(
    this, tr("タイトル"), tr("警告文"), QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel );

  switch( res )
  {
  case QMessageBox::Yes:
    // 保存できたなら、閉じてOK
    event->ignore();
    if (saved())  event->accept();
    break;

  case QMessageBox::No:
    // 保存しなくて、そのまま閉じてOK
    event->accept();
    break;

  case QMessageBox::Cancel:
    // キャンセルして作業に戻る
    event->ignore();
    break;

  default:
    break;
  }