模态和非模态对话框

模态对话框:点击出来一个对话框后,背后的对话框不能点击
非模态对话框:能点击
模态和非模态对话框

#include "mainwindow.h"

#include<QMenu>
#include<QMenuBar>
#include<QAction>
#include<QDialog>
#include<QDebug>


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    QMenuBar  *mBar = menuBar();//动态分配一个菜单栏
    setMenuBar(mBar);//设置菜单栏
    QMenu *menu = mBar->addMenu("对话框");
    QAction *p1 = menu->addAction("模态对话框");
    connect(p1,&QAction::triggered,
            [=]()
            {
               QDialog dlg;
               dlg.exec();//执行到这里程序不会动,等待用户操作
               qDebug() << "11111";
            }
          );

    QAction *p2 = menu->addAction("非模态对话框");
    connect(p2,&QAction::triggered,
            [=]()
            {
            /*  // QDialog dlg;   这条语句放到这里,非模态对话框只是快速闪现,需放到头文件才能一直出现
               dlg.show();//执行到这里程序会动,即出现非模态对话框的同时能打印下面的11111
               qDebug() << "11111";*/
            //以下是另一种方法,防止快速闪现,但是这种方法也不好,因为这样只有程序结束后才会释放空间
           /* QDialog *p = new QDialog(this);
            p->show();*/
          //以下是第二种解决方法的完善,即不指定父对象
          QDialog *p = new QDialog(this);
          p->setAttribute(Qt::WA_DeleteOnClose);//Qt::WA_DeleteOnClose指关闭的时候自动释放
          p->show();
            }
          );


}

MainWindow::~MainWindow()
{

}