I've put debuging in and also stepped through the code. That's how I know it's hitting the:

return;

and not:

QDialog::accept();

I just can't work out why the dialog box goes when QDialog::accept() has not been called.