模式对话框

简介:

描述

阻塞同一应用程序中其它可视窗口输入的对话框。模式对话框有自己的事件循环,用户必须完成这个对话框中的交互操作,并且关闭了它之后才能访问应用程序中的其它任何窗口。模式对话框仅阻止访问与对话相关联的窗口,允许用户继续使用其它窗口中的应用程序。

显示模态对话框最常见的方法是调用其exec()函数,当用户关闭对话框,exec()将提供一个有用的返回值,并且这时流程控制继续从调用exec()的地方进行。通常情况下,要获得对话框关闭并返回相应的值,我们连接默认按钮,例如:”确定”按钮连接到accept()槽,”取消”按钮连接到reject()槽。另外我们也可以连接done()槽,传递给它Accepted或Rejected。

效果

这里写图片描述

源码

MainWindow *pMainWindow = new MainWindow();
pMainWindow->setWindowTitle(QStringLiteral("主界面")); pMainWindow->show(); CustomWindow *pDialog = new CustomWindow(pMainWindow); pDialog->setWindowTitle(QStringLiteral("模式对话框")); // 关键代码 pDialog->exec(); // 关闭模态对话框以后才会执行下面的代码 pMainWindow->setWindowTitle(QStringLiteral("主界面-模式对话框")); qDebug() << QStringLiteral("关闭模态对话框以后,可以继续向下执行");
  1. 主界面被阻塞,不能进行点击、拖动等任何操作。
  2. exec()之后的代码不会执行,直到关闭模态对话框。

非模式对话框

描述

和同一个程序中其它窗口操作无关的对话框。在文字处理中的查找和替换对话框通常是非模式的,允许用户同时与应用程序的主窗口和对话框进行交互。调用show()来显示非模式对话框,并立即将控制返回给调用者。

如果隐藏对话框后调用show()函数,对话框将显示在其原始位置,这是因为窗口管理器决定的窗户位置没有明确由程序员指定,为了保持被用户移动的对话框位置,在closeEvent()中进行处理,然后在显示之前,将对话框移动到该位置。

效果

这里写图片描述

源码

MainWindow *pMainWindow = new MainWindow();
pMainWindow->setWindowTitle(QStringLiteral("主界面")); pMainWindow->show(); CustomWindow *pDialog = new CustomWindow(pMainWindow); pDialog->setWindowTitle(QStringLiteral("非模式对话框")); // 关键代码 pDialog->show(); // 下面的代码会立即运行 pMainWindow->setWindowTitle(QStringLiteral("主界面-非模式对话框")); qDebug() << QStringLiteral("立即运行");
  1. 主界面不会被阻塞,可以进行点击、拖动等任何操作。
  2. show()之后的代码会立即执行。

半模式对话框

描述

调用setModal(true)或者setWindowModality(),然后show()。有别于exec(),show() 立即返回给控制调用者。

对于进度对话框来说,调用setModal(true)是非常有用的,用户必须拥有与其交互的能力,例如:取消长时间运行的操作。如果使用show()和setModal(true)共同执行一个长时间操作,则必须定期在执行过程中调用QApplication ::processEvents(),以使用户能够与对话框交互(可以参考QProgressDialog)。

效果

这里写图片描述

源码

MainWindow *pMainWindow = new MainWindow();
pMainWindow->setWindowTitle(QStringLiteral("主界面")); pMainWindow->show(); CustomWindow *pDialog = new CustomWindow(pMainWindow); pDialog->setWindowTitle(QStringLiteral("半模式对话框")); // 关键代码 pDialog->setModal(true); pDialog->show(); // 下面的代码会立即运行 pMainWindow->setWindowTitle(QStringLiteral("主界面-半模式对话框")); qDebug() << QStringLiteral("立即运行");
  1. 主界面被阻塞,不能进行点击、拖动等任何操作。
  2. show()之后的代码会立即执行。

本文转自莫水千流博客园博客,原文链接:http://www.cnblogs.com/zhoug2020/p/6419962.html,如需转载请自行联系原作者
相关文章
|
弹性计算 负载均衡 NoSQL
【红包雨功能的】环境部署(弹性伸缩、负载均衡、Redis读写分离、云服务器部署)(二)
【红包雨功能的】环境部署(弹性伸缩、负载均衡、Redis读写分离、云服务器部署)
302 0
|
11月前
|
Java Linux 开发工具
IDEA中git提交前如何关闭code analysis以及开启格式化代码
【10月更文挑战第12天】本文介绍了在 IntelliJ IDEA 中关闭代码分析和开启代码格式化的步骤。关闭代码分析可通过取消默认启用检查或针对特定规则进行调整实现,同时可通过设置 VCS 静默模式在提交时跳过检查。开启代码格式化则需在 `Settings` 中配置 `Code Style` 规则,并通过创建 Git 钩子实现提交前自动格式化。
3489 3
|
前端开发 中间件 关系型数据库
node注册和登录你真的清楚了吗?
本文档介绍了创建MySQL数据表、安装配置MySQL模块的过程,并详细阐述了用户注册和登录的功能实现。注册功能包括表单数据校验、用户名占用检测、密码加密及用户插入。登录功能涉及密码判断、生成JWT Token以及使用express-jwt中间件进行Token解析。在整个过程中,还封装了一个错误处理函数用于统一响应错误信息。
103 2
node注册和登录你真的清楚了吗?
|
安全 网络协议 Linux
Linux下安装vsftpd
Linux下安装vsftpd
Linux下安装vsftpd
|
Python
Python编程:aiohttp和requests网络io性能比较
使用4 种方式 对网络发起10次请求,进行10次耗时测试
167 0
Python编程:aiohttp和requests网络io性能比较
|
设计模式 敏捷开发 Java
如何从容应对复杂性
软件的复杂性,是一个很泛的概念。但是一直都是开发过程中的一个难题,本文旨在探讨如何去从容应对复杂性。
如何从容应对复杂性
|
算法 Java C++
LeetCode(算法)- 226. 翻转二叉树
LeetCode(算法)- 226. 翻转二叉树
131 0
|
4天前
|
人工智能 运维 安全
|
2天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!