模态对话框与非模态窗口

模态对话框就是在没有关闭它之前,不能再与同一个应用程序的其他窗口进行交互,比如新建项目时弹出的对话框。

#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    QDialog dialog;
    dialog.setWindowTitle("模态对话框");
    dialog.exec();
}
在.cpp文件中建立个对象,之后加以.exec();进入消息循坏。这就是模态对话框了。
其实使用show()函数也可以建立模态对话框,只须在其前面使用setModal()函数即可。
    QDialog *dialog2 = new QDialog();
    dialog2.setModal(true);
    dialog2.show();
这样主窗口也是会展现出来了。与setM欧大力()函数相似的还有一个setWindowModality()函数,它有一个参数来设置模态对话框要阻塞的窗口类型,可以是
Qt::NonModal(不阻塞任何窗口,就是非模态)、Qt::WindowModal(阻塞它的父窗口、所有祖先窗口以及他们的子窗口)或Qt::ApplicationModal(阻塞整个应用程序的所有).
而setModal()函数默认设置的是Qt::ApplicationModal。
非模态窗口就是即可以交互,也可以与同一程序中的其他窗口交互。默认的就是非模态。
dialog2->setModal(false);


----------------------------------------------------------------------------------------------------------------------
    //点击模态对话框,弹出一个模态对话框       ...用this,要在[]中方=号。[=];
    connect(ui->actionMotai,&QAction::triggered,[=](){
        //模态对话框
        QDialog dlg(this);
        dlg.resize(300,150);
        dlg.exec();
        qDebug()<<"模态对话框弹出";
    });

    //非模态
    connect(ui->actionFeimotai,&QAction::triggered,[=](){
        //模态对话框
        QDialog * dlg2 =new QDialog(this);
        dlg2->resize(300,150);
        dlg2->show();
        dlg2->setAttribute(Qt::WA_DeleteOnClose);   //55号 关闭后释放
        qDebug()<<"非模态对话框弹出";
    });



posted @ 2020-03-03 09:52  A_Powered  阅读(403)  评论(0编辑  收藏  举报