QDialog类是所有对话框窗口类的基类。对话框窗口是一个用来完成短小任务或和用户进行简单交互的顶层窗口按照运行对话框时是否还可以和该程序的其它窗口进行交互,将它分为两类:模态(modal)对话框和非模态(modaless)对话框。

模态对话框
先看一个例子:
创建一个带界面的程序,该程序的构造函数如下

#include "mywidget.h"
#include "ui_mywidget.h"
#include <QDialog>MyWidget::MyWidget(QWidget *parent) :QWidget(parent),ui(new Ui::MyWidget)
{ui->setupUi(this);QDialog dialog(this);dialog.show();dialog.exec();
}MyWidget::~MyWidget()
{delete ui;
}

其中主要的代码如下:

QDialog dialog(this);
dialog.show();   //显示对话框
dialog.exec();  //阻塞函数,不让它执行下一行,让QDialog对话框显示,直到关闭才显示MyWidget对话框

运行结果如下:

然后关闭它,就会显示下一个MyWidget对话框

在QDialog对话框关闭之前,不能再与同一个应用程序的其它窗口进行交互的,这个QDialog对话框就是模态对话框。
也可以使用setModal()函数设置对话框,setModal(true)设置为模态对话框,setModal(false)设置为非模态对话框,这个函数里面的参数默认是false的。

#include "mywidget.h"
#include "ui_mywidget.h"
#include <QDialog>MyWidget::MyWidget(QWidget *parent) :QWidget(parent),ui(new Ui::MyWidget)
{ui->setupUi(this);QDialog *dialog = new QDialog(this);dialog->setModal(true);dialog->show();
}
MyWidget::~MyWidget()
{delete ui;
}

主要代码如下:

 QDialog *dialog = new QDialog(this);dialog->setModal(true);dialog->show();

这个也是把QDialog对话框设置为模态对话框的,代码运行如下:

与上一个不同的是,这个是显示出两个对话框,但是只有QDialog对话框可以进行操作,MyWidget对话框不能进行操作。只有把QDialog关闭了MyWidget对话框才可以进行操作。

非模态对话框
将上述代码的第二行注释掉或把setModal()函数设置为setModal(false),如下:

 QDialog *dialog = new QDialog(this);//dialog->setModal(true);dialog->show();

运行结果如下:

这次也是显示两个对话框,但是它们两个都是可以进行操作的,QDialog对话框就是非模态对话框,既可以与它交互,也可以与同一程序的其它窗口交互。

注:在关闭MyWidget对话框后,QDialog对话框也跟着关闭,因为MyWidget对话框相当于主程序,而QDialog是在MyWidget的程序的构造函数中,MyWidget关闭,构造函数自然也结束了。

这个是看《QT Creator快速入门》这本书的3.2.1,根据自己的理解写的笔记,如有错误,请大佬指正。

【Qt】对话框QDialog类,模态对话框和非模态对话框相关推荐

  1. MFC模态窗口与非模态窗口

    MFC模态窗口与非模态窗口 开发工具与关键技术:C++.VisualStudio 作者:何任贤 撰写时间:2019年07月25日 模态窗口的意思是指主窗口在打开模态窗口后,没法再操作主窗口,这就是模态 ...

  2. html弹出非模式窗口,JavaScript模态窗口和非模态窗口(转)

    JavaScript中弹出的窗口有模态窗口和非模态窗口.模态窗口就是打开一个子窗口,如果这个子窗口不关闭,就不能操作它的父窗口,原来程序暂停执行,直到这个模态窗口关闭 后才回到原来程序继续.非模态的就 ...

  3. WinForm:模态窗口与非模态窗口、Close与Dispose

    1.模态窗口与非模态窗口的区别: ①调用ShowDialog显示的为模态窗口,Show显示的为非模态窗口. ②模态窗口会堵塞主窗口,在模态窗口关闭前不能对主窗口进行操作.非模态窗口显示时依然可以操作主 ...

  4. QT 自学内容 day03 listWidget ,treeWidget,tableWidget ,stackedWidget,模态,和非模态 多种 对话框的的使用

    1.我的界面设计 2.建立一个模态对话框 头文件:#include <QDialog>//对话框 代码: //点击新建按钮,弹出一个对话框//使用信号连接函数connect(ui-> ...

  5. QT的QDialog类的使用

    详细说明 QDialog类是对话框窗口的基类. 对话窗口是顶级窗口,主要用于短期任务和与用户的简短通信. QDialogs可以是模式对话框,也可以是非模式对话框. QDialogs可以提供返回值,并且 ...

  6. 模态窗口和非模态窗口

    转载自:https://my.oschina.net/u/2425942/blog/882879 模态窗口就是在该窗口关闭之前,其父窗口不可能成为活动窗口的那种窗口. 例如: 窗口A弹出窗口B,如果窗 ...

  7. 模态弹窗与非模态弹窗

    在手机app应用中各种格式的弹窗效果相信大家都看过,也可能反感过某些弹窗,本文就来谈谈关于app弹窗设计以及弹窗的适用情景. 一.弹窗的定义 1.弹窗作用 弹窗是为了让用户回应,需要用户与之交互的窗口 ...

  8. 模态指令和非模态指令

    G指令和M指令均有模态和非模态指令之分. 模态指令:也称续效指令,按功能分为若干组.模态指令一经程序段中指定,便一直有效,直到出现同组另一指令或被其他指令取消时才失效,与上一段相同的模态指令可省略不写 ...

  9. QT中的模态对话框及非模态对话框

    模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在.又有叫法是称为模式对话框,无模式对话框等.所谓模态对话框就是在其 ...

最新文章

  1. 勒索病毒一周记:它让我们得到了什么经验教训?
  2. windows错误:Failed to import pydot. You must install pydot and graphviz for `pydotprint` to work.
  3. 11g compression 新特性(1)
  4. oracle11gr2 active data guard,Oracle11gR2 Aactive DataGuard(手动)装配部署及维护文档(三)之升级及rman...
  5. PHP微信支付没有收到微信的回调怎么修改订单状态:主动查询
  6. 苹果可弯曲屏幕新专利获准,折叠iPhone最快2020年现身?
  7. 只可顺守不可逆取书法_闲章不“闲”
  8. .NET 面向对象基础
  9. 前端实操案例丨如何实现JS向Vue传值
  10. Halcon的应用程序 打开后 弹出没有帮助文件错误提示
  11. Java项目迁移到uap上_Tomcat启动,不能加载项目问题。
  12. Git报错:/c/Users/zhouy/AppData/Roaming/npm/hexo: line 12: node: command not found
  13. uniapp基本语法/组件使用
  14. NTFS Change Journal(USN Journal)详解
  15. 数据分析总结一:数据分析思维
  16. python绘制糖葫芦_python用小海龟画糖葫芦
  17. MAML (Model-Agnostic Meta-Learning) 解读
  18. 当你无心学习,试一试跑步和听音乐
  19. 中国资源卫星应用中心新版数据服务平台介绍
  20. 4.2.2 创建和编辑选区:

热门文章

  1. material studio菜单栏及工具介绍
  2. 抖音大V的视频是怎么制作出来的?
  3. 迈向网络软件化未来 VMware与云杉网络共话SDN产业趋势
  4. python监听udp端口,Python和UDP监听
  5. ios 代码设置控件宽高比_IOS开发入门之iOS一套代码适配所有iPhone手机布局实现方案...
  6. win server2012远程桌面允许多用户同时登录配置
  7. c语言中static函数的用法
  8. 计算机毕业设计Java办公自动化管理系统(源码+系统+mysql数据库+lw文档)
  9. Jmeter——使用JSR223元件实现RSA登录加密
  10. 根据公司名称生成base64 logo(python文字转图片)