Qt基础-模态与非模态窗口


在Qt中,QDialog是所有对话框窗口类的基类,不只是对话框有模态与非模态区分,QWidget和QMainWindow窗口也可以设为模态,因此文章不称模态/非模态对话框,而叫做模态/非模态窗口。

模态与非模态的区别

模态(modal)窗口:窗口弹出后,没关闭之前,不可以对同一应用程序的其他窗口进行操作;
非模态(modeless)窗口:窗口弹出后,没关闭之前,可以对同一应用程序的其他窗口进行操作,可以同时和多个窗口进行交互;


模态窗口的实现方法

窗口的show()函数显示的类型是非模态的,有几种方法可以将窗口设为模态,如下:

QDialog对话框

  1. 方法1:exec()
QDialog dlg(this);
dlg.exec();

– 说明:exec是execute(执行)的缩写,当调用exec()函数时,并不会立即返回,只用当对话框关闭才会返回,因此,只有关闭对话框才会执行后续的代码。

  1. 方法2:setModal()
QDialog dlg(this);
dlg.setModal(true);		//相当于dlg.setWindowModality(Qt::ApplicationModal);
dlg.show();
  • 说明:设置完模态之后,会执行后续的代码,并不会阻塞。

  1. 方法3:setWindowModality()
QDialog dlg(this);
dlg.setWindowModality(Qt::ApplicationModal);
dlg.show();
  • 说明:setWindowModality()的参数设置要阻塞的窗口类型:
枚举值说明
Qt::NonModal0非模态,不阻塞任何窗口
Qt::WindowModal1模态,阻塞它的父窗口、所有的祖先窗口以及他们的子窗口
Qt::NonModal2模态,阻塞应用程序所有的窗口

QWidget和QMainWindow窗口

这两种窗口的模态实现只有上述QDialog中的方法3,即setWindowModality(),不再赘述。


设置置顶非模态窗口

有子窗口和父窗口,要实现子窗口置顶,但是可以对父窗口进行操作,可以在父窗口中进行设置:

subDlg->setParent(this,Qt::Window);
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值