The grandparent of the first widget, if it exists, can be cast to QMdiArea to add another widget... or you can emit a signal and have the main window add the new child. The second option is more flexible, e.g. if the sub window widget is used standalone also.
I don't know what you expect to happen when you call exec() on the child widget after adding it to the MDI area. The QDialog::exec() call is used to obtain a modal dialog, which is not particularly consistent with MDI, and breaks a simple test program on my machine.
Bookmarks