Qt的对话框分为两种,模态对话框和非模态对话框。
模态对话框
模态对话框:不可以对其其他窗口进行操作 比如像下面这种,出现后无法再操作其他窗口,比如像下面这种,创建后就无法在操作写代码的窗口。
创建对话框要将#include <QDialog>
头文件加上。模态对话框能够一直显示出来,且出现后无法再对其它窗口进行操作的关键就是通过exec()
实现这一功能,让该事件一直被循环。相当与“阻塞了其它操作”。
同时需要注意的是,要对对话框的大小就行设定,否则会出现一些警告,但是并不会报错。
//模态的创建 阻塞状态
// QDialog dlg(this);
// dlg.resize(200,100);
// dlg.exec();
// qDebug()<<"模态对话框弹出";
非模态对话框
非模态对话框:可以对其它窗口进行操作 下面这种就是模态对话框,创建后还可以对其它窗口进行操作,比如说在主窗口继续写代码。
非模态对话框,有两种写法,一种是下面的这种。
//用这种写法得到的对话框,会一闪而过
//原因主要有:它保存在栈区,当它被执行完后,就会被回收
//其次下面的这个属于一个构造函数,那么当它show完后,lamada函数执行完后,就要被回收掉,所以会执行它的析构
QDialog dlg2(this);
dlg2.show();
下面的是另一种
//使用下面这个方法创建的对话框,不会闪一下就没。
//原因是 这时的dig2虽然是个指针,但是它指向的是一个创建在堆上的QDIalog对象,它的回收是由对象树去实现的
//所以不会简单的一闪而过
//但是这样搞,会有一定的概率内存泄漏,因为 new QDialog(this)一直没有被释放,除非是吧mainwindow主窗口关闭
QDialog *dlg2 = new QDialog(this);
dlg2.resize(200,100);
dlg2->setAttribute(Qt::WA_DeleteOnClose);//可以通过设置,关闭时就delete的属性,减少内存泄漏的风险
dlg2->show();