模态对话框:指该对话框关闭之前不可以对其他窗口进行操作,只有等该对话框关闭之后才可以操作其他窗口。
非模态对话框:该对话框激活的情况下也可以对其他窗口进行操作。
模态对话框:
Qdialog dlg;
dlg.show();
执行上面的代码,我们会发现窗口一闪而过,其原因是因为dlg被申明为一个局部变量,当用完之后就自动销毁,所以窗口show完之后立马就被释放。为了不让它一闪而过,使用
dlg.exec();//阻塞
这个语句起到阻塞程序的作用,当执行到这里的时候停住了,这样也不能对其他窗口进行操作,所以
Qdialog dlg;
dlg.exec();
就是模态对话框的写法。
非模态对话框:
Qdialog *dlg=new Qdialog;
dlg->show();
dlg->setAttribute(Qt::WA_DelecteOnClose);
执行上面程序弹出窗口不会一闪而过,因为new创建在堆上,不会自动销毁,需要手动delete。dlg->setAttribute(Qt::WA_DelecteOnClose)的作用是当窗口关闭时,对话框释放。