QT中的模态和非模态对话框

模态对话框就是在我们没有关闭它之前,不能再与同一个应用程序的其他窗口进行交互,比如新建项目时弹出的对话框。要想使一个对话框成为模态对话框,只需要调用它的exec()函数:

QDialog dialog(this);
dialog.exec();

而对于非模态对话框,既可以与它交互,也可以与同一程序中的其他窗口交互,例如Microsoft Word中的查找替换对话框。要使一个对话框成为非模态对话框,我们就可以使用new操作来创建,然后使用show()函数来显示。

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

使用show()函数也可以建立模态对话框,只需在其前面使用setModal()函数即可。例如:

QDialog *dialog = new QDialog(this);
dialog->setModal(true);
dialog->show();

现在运行程序,可以看到生成的对话框是模态的。但是,它与用exec()函数时的效果是不一样的。这是因为调用完show()函数后会立即将控制权交给调用者,那么程序可以继续往下执行。而调用exec()函数却不是这样,它只有当对话框被关闭时才会返回。

与setModal()函数相似的还有一个setWindowModality()函数,它有一个参数来设置模态对话框要阻塞的窗口类型,可以是:

  • Qt::NonModal(不阻塞任何窗口,就是非模态)
  • Qt::WindowModal(阻塞它的父窗口和所有祖先窗口以及它们的子窗口)
  • Qt::ApplicationModal(阻塞整个应用程序的所有窗口)

而setModal()函数默认设置的是Qt::ApplicationModal

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值