qml 自定义消息框_QT自定义消息框
自定义消息框
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自定义消息框相关推荐
- js 实现多选框(复选框) 和单选框,下拉框功能完整示例代码附效果图
<!DOCTYPE html> <html><head><meta charset="utf-8" /><script src ...
- html 选择列表框,列表框和组合框的区别是什么?
列表框和组合框的区别 1.自动排序方式不同: 当列表框不能同时显示所有项目的时候,将自动添加滚动条,使用户可以滚动查阅所有选项.组合框的风格取值定义了组合框的具体属性,包括是否自动排序,是否有滚动条. ...
- python中组合框_PyQt 组合框
# PyQt 组合框 > 原文: [https://pythonbasics.org/PyQt-combobox/](https://pythonbasics.org/PyQt-combobox ...
- python+selenium七:下拉框、选项框、select用法
# from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains im ...
- 如何用javascript获取文本框,下拉框,单选框的对应值或者将值赋给它们?雪原虎 发布于:2007-10-22 00:32
如何用javascript获取文本框,下拉框,单选框的对应值或者将值赋给它们? 雪原虎 发布于:2007-10-22 00:32 1.文本框 1.1 <input type="text ...
- Vue.js-Day02-AM【Vue表单、核心指令(单选框、密码框、多行文本框、单选、多选、勾选、下拉列表)、组件汇总案例、ToDoList案例、计算属性(computed)、watch监听】
Vue.js实训[基础理论(5天)+项目实战(5天)]博客汇总表[详细笔记] 目 录 1.Vue表单 原生JS实现异步表单提交 运行截图 代码 核心指令 单选框.密码框.多行文本框 单选 多选 勾 ...
- opencv进阶学习笔记6:使用鼠标在图像上绘制矩形框或者多边形框
基础版笔记传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版笔记目录: python+opencv进阶版学习笔记目录(适合有一定基础) 感兴趣区域传统绘制: openc ...
- 向工作表中添加列表框或组合框
http://office.microsoft.com/zh-cn/excel-help/HP010236681.aspx 添加列表框(表单控件) 如果"开发工具"选项卡未显示,请 ...
- 点击area不出现黑框_30款厨房门,黑框?白框?你家选哪个合适?
点击上方"蓝字"关注我,可领取免费设计图 导语:厨房门通常是在客餐厅里面比较显眼的位置,它的选择搭配也同样影响着客餐厅的整体风格搭配,因此对于厨房门的搭配也是不容忽视的,今天就跟大 ...
最新文章
- 派派月度环比增长明显 创新互动玩法引关注
- 【转载】让我们来FirePHP
- buu Quoted-printable
- Windows Server 2008 安装
- linux+npm+v+报错_linux – npm install会导致像npm ERR这样的错误...
- python切换ip群发邮件_通过 python 把家里路由的 IP 发邮件给自己
- cf1555D. Say No to Palindromes
- 在ADF 12.2.1.3中使用基于JSON的REST Web服务
- SpringMVC+Maven开发项目源码详细介绍
- FTP服务器windows配置
- android 清除某个通知,android清除通知栏消息
- MySQL 5.7 中文全文检索
- 马王堆出土道德经原文(非删改本)
- Android 权限 翻译
- 定位弹窗软件----找到真凶并做后续防御
- SBX(模拟二进制交叉)的代码(python)实现
- FPGA数字信号处理之乘法器
- 写点看Harvard CS50 公开课的感受
- 管理者需换位思考 员工都是CEO
- 翻译:Deep Multimodal Clustering for Unsupervised Audiovisual Learning