The launcher runs as a modal QDialog::exec() with no application event
loop and no menu bar. Escape works because QDialog maps it to reject()
internally, but macOS disables the auto-generated application menu (and
its Cmd+Q) while a modal session is active, so Cmd+Q was swallowed by
the OS and never closed the dialog. Bind QKeySequence::Quit directly on
the dialog so it is handled inside the modal loop, mirroring Escape.