I just found that the close() slot of widgets returns a bool, with a value precisely intended for the case at hand. So a better solution is probably not to use closeAllSubWindows() at all, and code instead the closeEvent as follows:
Qt Code:
  1. void MainWindow::closeEvent (QCloseEvent* event)
  2. {
  3. QList<QMdiSubWindow*> list = mdi->subWindowList ();
  4.  
  5. for (int i = 0; i < list.size (); i++)
  6. if (!list[i]->close ()) {
  7. event->ignore ();
  8. return;
  9. }
  10.  
  11. event->accept ();
  12. }
To copy to clipboard, switch view to plain text mode 
which will stop the procedure at the first MDI child that cancels the event.

I'm open to hear how other people have coded their MDI apps' closeEvent.