来吧,鄙视我吧,既然说了,我说说原因,
因为新手,不清楚Qt是怎么处理窗口或者QWidget的show和exec()函数的,看文档上说show是显示出这个QWidget和它的子类,exec()是对于对话框来说,显示一个模态对话框,如果对话框是一个application model那么在关闭这个对话框这前,不同对本程序的任何其它窗口交互,如果对话框是一个window model,它只是阻塞对它父窗口的交互,
不是因为局部变量的问题,如果程序中已经有一个QMainWindow后,想再显示一个QMainWindow呢,它没有exec,这时新建的QMainWindow必须对动态分配内存的方法声明,new QMainWindow然后再调用它的show方法就可以了,
个人认为可以是内存分配的问题,主窗口(程序的第一个窗口,可以分配在堆上,也可以分配在堆栈上),但后来的窗口(包括对话框,必须分配在堆上(对于show()方法来说))
如果对话框是调用的exec()方法,刚可以在堆堆栈上创建