Qt4中的模态与非模态对话框用法总结

来源:互联网 发布:用户数据存在哪 编辑:程序博客网 时间:2024/06/10 04:31

模态对话框(Modal Dialog)与非模态对话框(Modeless Dialog)的概念不是Qt所独有的,在各种不同的平台下都存在。又有叫法是称为模式对话框,无模式对话框等。

所谓模态对话框就是在其没有被关闭之前,用户不能与同一个应用程序的其他窗口进行交互,直到该对话框关闭。对于非模态对话框,当被打开时,用户既可选择和该对话框进行交互,也可以选择同应用程序的其他窗口交互。

Qt中,显示一个对话框一般有两种方式,一种是使用exec()方法,它总是以模态来显示对话框;另一种是使用show()方法,它使得对话框既可以模态显示,也可以非模态显示,决定它是模态还是非模态的是对话框的modal属性。

Qt中,Qt的模态与非模态对话框选择是通过其属性modal来确定的。我们来看看modal属性,其定义如下:

     modal : bool

默认情况下,对话框的该属性值是false,这时通过show()方法显示的对话框就是非模态的。而如果将该属性值设置为true,就设置成了模态对话框,其作用于把QWidget::windowModality属性设置为Qt::ApplicationModal。

而使用exec()方法显示对话框的话,将忽略modal属性值的设置并把对话框设置为模态对话框。

一般使用setModal()方法来设置对话框的modal属性。

我们总结一下设置对话框为模态的方法。

 如果要设置为模态对话框,最简单的就是使用exec()方法,示例代码如下:

     MyDialog myDlg;
     myDlg.exec();

也可以使用show()方法,示例代码如下:

     MyDialog myDlg;
     myDlg.setModal(true);
     myDlg.show();

  如果要设置为非模态对话框,必须使用show()方法,示例代码如下:

     MyDialog myDlg;
     myDlg.setModal(false);//或者myDlg.setModal();
     myDlg.show();

再次强调,目前有的朋友对于模态对话框和非模态对话框的认识有误解,认为使用show()方法显示的就是非模态对话框,这是不正确的。

小贴士:有时候,我们需要一个对话框以非模态的形式显示,但又需要它总在所有窗口的最前面,这时可以通过如下代码设置:

     MyDialog myDlg;
     myDlg.setModal(false);//或者myDlg.setModal();
     myDlg.show();
 
     //关键是下面这行
     myDlg.setWindowFlags(Qt::WindowStaysOnTopHint);
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 笔记本电脑速度太慢怎么办 电脑图形处理弱怎么办 戴尔笔记本电脑连不上网络怎么办 系统备份没有了怎么办 cad2014运行很慢怎么办 cad2007运行很慢怎么办 cad运2018行很慢怎么办 800*800图片太大怎么办 ps出现双箭头怎么办 衣服上面染上色怎么办 联想一体机忘记密码怎么办 三星a7手机黑屏怎么办 联想g40很卡怎么办 联想笔记本电脑卡机怎么办 笔记本电脑卡机了怎么办 笔记本电脑卡机动不了怎么办 ps变得很卡怎么办 戴尔笔记本卡了怎么办 戴尔电脑卡死了怎么办 win10显示器颜色不正常怎么办 没有密码重置盘怎么办 美术生英语不好怎么办 mbr分区安装不了怎么办 倒闭的共享单车怎么办 喷水壶喷嘴堵塞怎么办 电水壶按钮坏了怎么办 主机按钮坏了怎么办 手机系统删掉了怎么办 学习差的孩子怎么办 小猫生病不吃饭怎么办 深圳公寓被坑怎么办 跳芭蕾硬了怎么办 跳拉丁起反应怎么办 会认字不会写字怎么办 孩子不认识的字怎么办 小孩暑假没人带怎么办 放暑假了孩子怎么办 暑假孩子没人带怎么办 幼儿园孩子不愿意写字怎么办 孩子写作业潦草怎么办 写字写到手痛怎么办