Qt创建窗口闪退的问题

911 阅读1分钟

在函数内创建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();
}