在函数内创建Qt窗口,使用该函数时,创建的窗口闪退
原因很简单,因为QMainWindow窗口的show()函数是非阻塞方式运行窗口,窗口创建后代码继续运行而退出函数,函数退出后直接销毁其中的窗口变量,导致窗口显示后直接被销毁,闪退
解决办法:
对于qt的三种窗口,QWidget、QMainWindow、QDialog
QDialog可以使用函数exec()来阻塞式显示窗口,这样直到窗口被关闭才会继续运行后续代码退出函数。
而对于QWidget与QMainWindow(继承于QWidget),可以使用new窗口对象的方式来显示窗口,由于new创建的对象存在于堆中,不会伴随函数结束而被释放,因此窗口能够继续存在,但是需要记住手动释放窗口对象。