QDialog,QWidget实现模态及非模态

本文介绍了如何使用QDialog和QWidget实现模态与非模态窗口。对于QDialog,可以直接使用exec()和setModal()。而对于QWidget,可以通过setWindowModality()设置窗口阻塞类型。模态效果要求QWidget的父部件为0。另外,设置Qt::FramelessWindowHint可能会影响模态行为,需要结合Qt::Dialog进行调整。模态与非模态的实现与show()或exec()无关,主要取决于窗口属性。
摘要由CSDN通过智能技术生成

模态QDialog

QDialog dlg(this);
dlg.exec();
QDialog *pDlg=new QDialog(this);
pDlg->setModal(true);
pDlg->show();

非模态QDialog

QDialog *pDlg=new QDialog(this);
pDlg->show();

       QDialog实现模态非模态很简单,但是对于QWidget有点迷茫,QWidget中没有exec(),也没有setModal()方式,但是想想看,QWidget作为QDialog的基类,而且QWidget作为“窗口”使用也是在平常不过了,所以会意识到QWidget中是否存在一个相对exec()或setModal()更基本的操作来实现模态和非模态呢?就这样,我找到了setWindowModality(),此函数就是用来设置QWidget运行时的程序阻塞方式的,参数解释如下:

       Qt::NonModal 不阻塞

      Qt::WindowModal 阻塞父窗口,所有祖先窗口及其子窗口

      Qt::ApplicationModal 阻塞整个应用程序

   看来,setModal()也就是使用setWindowModali

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值