ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Qt模态对话框和非模态对话框

2020-03-15 22:38:39  阅读:259  来源: 互联网

标签:模态 Qt exec show 对话框 modal dialog


在这里插入图片描述
模态框和非模态框创建都是一样的,关键在于显示方法的不同。
两者的区别如下:

模态对话框(不能对其他窗口进行操作),非模态对话框(可以对其他窗口进行操作)
模态对话框通过exec()方法显示,而非模态对话框通过show()方法显示。
这里就要说一下show()和exec()的区别,
show():
显示一个非模式对话框。控制权即刻返回给调用函数。
弹出窗口是否模式对话框,取决于modal属性的值。
(原文:Shows the dialog as a modeless dialog. Control returns immediately to the calling code.
The dialog will be modal or modeless according to the value of the modal property. )

exec():
显示一个模式对话框,并且锁住程序直到用户关闭该对话框为止。函数返回一个DialogCode结果。
在对话框弹出期间,用户不可以切换同程序下的其它窗口,直到该对话框被关闭。
(原文:Shows the dialog as a modal dialog, blocking until the user closes it. The function returns a DialogCode result.
Users cannot interact with any other window in the same application until they close the dialog. )
这里我们用代码看一下

  		QDialog dia(this);
    	dia.resize(200,100);
      	dia.exec();
    	qDebug()<<"模态对话框创建";

        //非模态对话框创建
        QDialog * dia1 = new QDialog(this);
        dia1->show();
        dia1->setAttribute(Qt::WA_DeleteOnClose);

这段代码是写在lambda表达式里面的,所以非模态对话框的创建采用了new,否则会出现对话框一闪而过的情况,而模态对话框由于调用了exec()方法,所以不会出现一闪而过的情况,最后一行的setAttribute(Qt::WA_DeleteOnClose);是让堆中的空间在创建后及时的释放,以防申请空间过多而导致的内存泄漏问题(虽然正常情况不可能出现)。

标签:模态,Qt,exec,show,对话框,modal,dialog
来源: https://blog.csdn.net/ShenHang_/article/details/104877408

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有