模态对话框VS非模态对话框

模态对话框VS非模态对话框

模态对话框:此对话框关闭后,它的上一级对话框才可操作
非模态对话框:两个对话框可同时操作

代码实现

例如:在MainWindow中,利用pushButton打开新的对话框

void MainWindow::on_pushButton_clicked()
{
    //非模态对话框
    QDialog *dlg = new QDialog(this);
    dlg->setWindowTitle("非模态对话框");
    dlg->setFixedSize(300,200);
    dlg->show();

    //模态对话框1
    QDialog dlg1(this);
    dlg1.setWindowTitle("模态对话框1");
    dlg1.setFixedSize(200,100);
    dlg1.exec();//exec()函数只有在窗口被关闭后才会返回(代码继续执行)

    //模态对话框2
    QDialog *dlg2 = new QDialog(this);
    dlg2->setModal(true);
    dlg2->setWindowTitle("模态对话框2");
    dlg2->setFixedSize(200,100);
    dlg2->show();
}

运行效果:

点击pushButton按钮后,只会打开两个对话框,此时只有模态对话框1是可操作的,关闭模态对话框1后才会打开模态对话框2,主窗口和非模态对话框依旧不可操作,直到模态对话框2关闭,非模态对话框和主窗口才可进行操作
模态对话框VS非模态对话框_第1张图片

那么如果交换两个模态对话框代码顺序会怎么样呢

void MainWindow::on_pushButton_clicked()
{
    //非模态对话框
    QDialog *dlg = new QDialog(this);
    dlg->setWindowTitle("非模态对话框");
    dlg->setFixedSize(300,200);
    dlg->show();

    //模态对话框2
    QDialog *dlg2 = new QDialog(this);
    dlg2->setModal(true);
    dlg2->setWindowTitle("模态对话框2");
    dlg2->setFixedSize(200,100);
    dlg2->show();//两个窗口同时弹出,掉用完show()函数把控制权交给调用者

    //模态对话框1
    QDialog dlg1(this);
    dlg1.setWindowTitle("模态对话框1");
    dlg1.setFixedSize(200,100);
    dlg1.exec();//第一个窗口关闭第二个才会弹出,exec()函数只有在窗口被关闭后才会返回
}

运行效果:

首先点击pushButton之后,三个对话框都会打开,此时只有模态对话框1可以操作,模态对话框1关闭后,模态对话框2可操作
模态对话框VS非模态对话框_第2张图片

综上所述:当模态对话框存在的时候,主窗口和非模态对话框不可操作;多个模态对话框存在的时候,只有最后创建出来的可操作
PS:不可根据指针和非指针来判断是否为模态对话框哦

你可能感兴趣的:(QT,C++)