Jeżeli dopuszczasz możliwość przywrócenia QMainWindow to warto je po prostu ukryć (hide()), jeżeli nie to (tzn chcesz zniszczyć QMainWindow) utworzenie QDialog bez parenta powinno załatwić sprawę, ale nie jestem na 100% pewny, raczej QMainWindow powinno być ty oknem głównym, które żyje podczas działania całego programu.