自定义消息框

Qt 支持模态对话框和非模态对话框。

模态与非模态的实现:

l 使用QDialog::exec()实现应用程序级别的模态对话框

l 使用QDialog::open()实现窗口级别的模态对话框

l 使用QDialog::show()实现非模态对话框。

模态对话框

l Qt 有两种级别的模态对话框:

n 应用程序级别的模态

当该种模态的对话框出现时,用户必须首先对对话框进行交互,直到关闭对话框,然后才能访问程序中其他的窗口。

n 窗口级别的模态

该模态仅仅阻塞与对话框关联的窗口,但是依然允许用户与程序中其它窗口交互。窗口级别的模态尤其适用于多窗口模式。

一般默认是应用程序级别的模态。

在下面的示例中,我们调用了exec()将对话框显示出来,因此这就是一个模态对话框。当对话框出现时,我们不能与主窗口进行任何交互,直到我们关闭了该对话框。

QDialog dialog;

dialog.setWindowTitle(tr("Hello, dialog!"));

dialog.exec();

非模态对话框

下面我们试着将exec()修改为show(),看看非模态对话框:

QDialog dialog(this);

dialog.setWindowTitle(tr("Hello, dialog!"));

dialog.show();

是不是事与愿违?对话框竟然一闪而过!这是因为,show()函数不会阻塞当前线程,对话框会显示出来,然后函数立即返回,代码继续执行。注意,dialog 是建立在栈上的,show()函数返回,MainWindow::open()函数结束,dialog 超出作用域被析构,因此对话框消失了。知道了原因就好改了,我们将 dialog 改成堆上建立,当然就没有这个问题了:

QDialog *dialog = new QDialog;

dialog->setWindowTitle(tr("Hello, dialog!"));

dialog->show();

如果你足够细心,应该发现上面的代码是有问题的:dialog 存在内存泄露!dialog 使用 new 在堆上分配空间,却一直没有 delete。解决方案也很简单:将 MainWindow 的指针赋给 dialog 即可。还记得我们前面说过的 Qt 的对象系统吗?

不过,这样做有一个问题:如果我们的对话框不是在一个界面类中出现呢?由于QWidget的 parent 必须是QWidget指针,那就限制了我们不能将一个普通的 C++ 类指针传给 Qt 对话框。另外,如果对内存占用有严格限制的话,当我们将主窗口作为 parent 时,主窗口不关闭,对话框就不会被销毁,所以会一直占用内存。在这种情景下,我们可以设置 dialog 的WindowAttribute:

QDialog *dialog = new QDialog;

dialog->setAttribute(Qt::WA_DeleteOnClose);

dialog->setWindowTitle(tr("Hello, dialog!"));

dialog->show();

setAttribute()函数设置对话框关闭时,自动销毁对话框。

qml 自定义消息框_QT自定义消息框相关推荐

  1. js 实现多选框(复选框) 和单选框,下拉框功能完整示例代码附效果图

    <!DOCTYPE html> <html><head><meta charset="utf-8" /><script src ...

  2. html 选择列表框,列表框和组合框的区别是什么?

    列表框和组合框的区别 1.自动排序方式不同: 当列表框不能同时显示所有项目的时候,将自动添加滚动条,使用户可以滚动查阅所有选项.组合框的风格取值定义了组合框的具体属性,包括是否自动排序,是否有滚动条. ...

  3. python中组合框_PyQt 组合框

    # PyQt 组合框 > 原文: [https://pythonbasics.org/PyQt-combobox/](https://pythonbasics.org/PyQt-combobox ...

  4. python+selenium七:下拉框、选项框、select用法

    # from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains im ...

  5. 如何用javascript获取文本框,下拉框,单选框的对应值或者将值赋给它们?雪原虎 发布于:2007-10-22 00:32

    如何用javascript获取文本框,下拉框,单选框的对应值或者将值赋给它们? 雪原虎 发布于:2007-10-22 00:32 1.文本框 1.1 <input type="text ...

  6. Vue.js-Day02-AM【Vue表单、核心指令(单选框、密码框、多行文本框、单选、多选、勾选、下拉列表)、组件汇总案例、ToDoList案例、计算属性(computed)、watch监听】

    Vue.js实训[基础理论(5天)+项目实战(5天)]博客汇总表[详细笔记] 目   录 1.Vue表单 原生JS实现异步表单提交 运行截图 代码 核心指令 单选框.密码框.多行文本框 单选 多选 勾 ...

  7. opencv进阶学习笔记6:使用鼠标在图像上绘制矩形框或者多边形框

    基础版笔记传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录: python+opencv进阶版学习笔记目录(适合有一定基础) 感兴趣区域传统绘制: openc ...

  8. 向工作表中添加列表框或组合框

    http://office.microsoft.com/zh-cn/excel-help/HP010236681.aspx 添加列表框(表单控件) 如果"开发工具"选项卡未显示,请 ...

  9. 点击area不出现黑框_30款厨房门,黑框?白框?你家选哪个合适?

    点击上方"蓝字"关注我,可领取免费设计图 导语:厨房门通常是在客餐厅里面比较显眼的位置,它的选择搭配也同样影响着客餐厅的整体风格搭配,因此对于厨房门的搭配也是不容忽视的,今天就跟大 ...

最新文章

  1. 派派月度环比增长明显 创新互动玩法引关注
  2. 【转载】让我们来FirePHP
  3. buu Quoted-printable
  4. Windows Server 2008 安装
  5. linux+npm+v+报错_linux – npm install会导致像npm ERR这样的错误...
  6. python切换ip群发邮件_通过 python 把家里路由的 IP 发邮件给自己
  7. cf1555D. Say No to Palindromes
  8. 在ADF 12.2.1.3中使用基于JSON的REST Web服务
  9. SpringMVC+Maven开发项目源码详细介绍
  10. FTP服务器windows配置
  11. android 清除某个通知,android清除通知栏消息
  12. MySQL 5.7 中文全文检索
  13. 马王堆出土道德经原文(非删改本)
  14. Android 权限 翻译
  15. 定位弹窗软件----找到真凶并做后续防御
  16. SBX(模拟二进制交叉)的代码(python)实现
  17. FPGA数字信号处理之乘法器
  18. 写点看Harvard CS50 公开课的感受
  19. 管理者需换位思考 员工都是CEO
  20. 翻译:Deep Multimodal Clustering for Unsupervised Audiovisual Learning

热门文章

  1. 详解 Qt 串口通信程序全程图文 (4)
  2. springboot 历史版本文档_这个男人练了整整二年的SpringBoot看他如何教你学学学!...
  3. spring 的singleton 和prototype的区别和应用场合
  4. github上传命令
  5. 栈的基本操作(数组/链表)
  6. Tomcat类加载器为何违背双亲委派模型
  7. 关于@Mapper注解的几个问题
  8. spring中用到的9种设计模式
  9. Docker的安装及操作
  10. 基于Vue实现关键词实时搜索高亮显示关键词