一、对话框的创建

  • 在一个应用程序中,为了实现一些特定的功能,必须自定义对话框
  • 自定义对话框一般从QDialog继承而来。当然,根据需要也可以自己设计从别的对话框继承而来

二、对话框的使用场景

定义了自己的对话框之后,对对话框的使用一般包括

  • 在特定情境下创建生成该对话框
  • 传递数据给对话框
  • 获得对话框的输入数据
  • 判断对话框单击按钮的返回类型

等等....

三、对话框的显示与删除


显示

  • 模态对话框:​当自定义对话框未关闭时,不可以对父窗口进行操作

使用:创造对话框对象后,与exec();配合使用

程序执行到exec();时,如果不对对话框进行操作,后面的代码不会执行

QDialog *dlg = new QDialog(&w);//创建对话框对象,参数:父窗口
dlg->setWindowTitle(QStringLiteral("模态对话框"));
dlg->exec(); //exec:窗口等待结束(点击确定或关闭)

  • 非模态显示:​当自定义对话框未关闭时,还可以对父窗口进行操作。常用于需要进行界面交互操作的情况

使用:对话框关闭前,使用show();

QDialog *dlg = new QDialog(&w);
dlg->setWindowTitle(QStringLiteral("非模态对话框"));
dlg->show();

  • 半模态对话框:​也是模态的一种,此对话框未关闭时,也不允许对此应用的其他窗口进行操作

使用:调用setModal(true);或者setWindowModality();后,然后再show();

适用于有进度条的操作

与exec();的区别:exec();需要程序返回一个值才可以继续执行后面的代码,而半模态show();函数后面的代码已经执行了

QDialog* dlg=new QDialog(&w);
dlg->setWindowTitle(QStringLiteral("半模态对话框"));
dlg->setModal(true);
dlg->show();



删除

  • 当自定义对话框关闭时,释放对话框对象:​这种情况适用于只调用少次的对话框,释放对话框之后,释放内存
  • 当自定义对话框关闭时,不释放对话框对象:​这种情况适用于多次调用对话框,关闭之后,对话框对象仍然存在内存中,并没有释放内存。当父窗口退出时,会自动执行对话框的析构函数,释放内存


四、演示案例