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