Qt对话框的生命周期及模态设置
来源:互联网 发布:功夫英语 知乎 编辑:程序博客网 时间:2024/05/01 09:11
对话框的生命周期
QDialog dialog(this);
dialog.show();
这样在一个函数中定义的对象是建立在栈上的,函数执行完毕,dialog的显示就结束,显示的效果可能就是这个窗口一闪而逝。
QDialog *dialog = new QDialog(this);
dialog->show();
这样定义了一个指向QDialog对象的指针,用new开辟了新的内存空间,函数执行完毕,dialog还能够显示。此处我们可能会问,这样不会发生内存泄漏吗?
情况是这样,这里为dialog指明了父窗口,当父窗口关闭的时候,dialog随之被销毁。如果对内存占用有严格限制的话,当我们将主窗口作为 parent 时,主窗口不关闭,dialog就不会被销毁,所以会一直占用内存。在这种情景下,我们可以调用deleteLater()函数,或者是设置 dialog 的WindowAttribute:
QDialog *dialog = new QDialog;
dialog->setAttribute(Qt::WA_DeleteOnClose); // 或者 dialog->deleteLater();
dialog->setWindowTitle(tr("Hello, dialog!"));
dialog->show();
详细解释见博文:http://blog.csdn.net/zzwdkxx/article/details/25970677
对话框模态的设置
调用exec()可以设置模态,如
QDialog *dialog = new QDialog(this); // 将this作为父窗
dialog->exec(); //只显示dialog,不显示父窗,只有当子窗口关闭,父窗口才显现
采用show显示的窗口,用setModal()同样可以设置模态
QDialog *dialog = new QDialog(this);
dialog->setModal(true);
dialog->show(); //子窗口显示的同时,父窗口也显示出来,只不过子窗口未关闭情况下无法对父窗口操作
与setModal()相似的一个函数setWindowModality()可以设置阻塞哪些窗口的显示,它有一个参数可以是Qt::NonModal(非模态)、Qt::WindowModal(模态,阻塞父窗口、祖先窗口及子窗口)、Qt::ApplicationModal(模态,阻塞整个应用程序所有窗口),默认状态下为最后一个。
关于Qt中new和delete的问题,还可参考:http://blog.csdn.net/dbzhang800/article/details/6300025
- Qt对话框的生命周期及模态设置
- Qt对话框的生命周期及模态设置
- Qt 模态对话框及生命周期
- Qt 模态对话框与非模态对话框及生命周期
- Qt 模态对话框与非模态对话框及生命周期
- Qt 模态对话框与非模态对话框及生命周期
- QT模态对话框及非模态对话框
- QT模态对话框及非模态对话框
- QT模态对话框及非模态对话框
- QT模态对话框及非模态对话框
- QT模态对话框及非模态对话框
- QT模态对话框及非模态对话框学习
- QT模态对话框及非模态对话框学习
- QT模态对话框及非模态对话框学习
- QT模态对话框及非模态对话框学习
- QT模态对话框及非模态对话框学习
- QT模态对话框及非模态对话框学习
- QT模态对话框及非模态对话框学习
- Aspose.Word控件实现Word文档的操作(创建和合并单元格)
- 连接到 Flash 调试器
- Android Framework 分析---3PackageManager 分析
- Linux Posix Thread Programming
- andrpid优化之删除无用资源
- Qt对话框的生命周期及模态设置
- 当我们建站的时候,问问自己为什么要建设这个网站?有什么收益么?处于什么样子的目的?
- OCP-1Z0-051 第138题 not操作,IN、ANY、ALL的应用
- 棋牌社区最近更新源码
- 传吴佩慈产后被甩 纪晓波改贴大奶妹
- 图像库---Image Datasets---OpenSift源码---openSurf源码
- Lucene实战(三)多Field搜索,并且对搜索结果进行过滤和[自定义]排序
- const char*怎么转换成unsigned char*
- C++11之Lambda特性探析