一,模态对话框,阻赛式,事件在对话框内部循环,子窗口不关闭,父窗口不能操作
1. exec()显示,模态,程序运行到这一行就会阻塞了
Dialog dlg;
dlg.exec();
栈中创建模态对话框,关闭对话框,内存清除
2.show 即可使模态也可以是非模态,由setModal决定
Dialog *pDlg = new Dialog(this); pDlg->setModal(true); pDlg->show();
堆中创建模态对话框
关闭对话框,栈中指针清除,对中内存,this父窗口清除,setAttribute (Qt::WA_DeleteOnClose);窗口关闭时,自动清除内存
二,非模态对话框,非阻赛式,独立存在,和父窗口可以同时操作
1,正常显示
Dialog *pDlg = new Dialog();
pDlg->setModal(false);
pDlg->show();
构造函数中添加
setAttribute (Qt::WA_DeleteOnClose);窗口关闭时,自动清除内存,否则内存泄漏
堆中创建非模态对话框
2,正常显示 关闭父窗口,内存清除
Dialog *pDlg = new Dialog(this);
pDlg->setModal(false);
pDlg->show();
堆中创建非模态对话框
3 一闪而过
Dialog dlg;
dlg.setModal(false);
dlg.show();
栈中创建非模态对话框
会一闪而过 也就是说对话框显示至桌面时,依然会继续往下运行,运行到函数的末尾(这个是消息映射函数)局部变量就被销毁了,所以对话框就消失了 如果是在堆上,销毁的只是指向这个堆对象的指针,堆对象不会被销毁,对话框就不糊消失了