Qt创建窗口闪退的问题,模态与非模态窗口的显示

⌚Time: 2022-04-21 22:46:54

👨‍💻Author: Jack Ge

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

}