Qt 模态 非模态对话框 半模态 不阻塞对话框

Part1: 什么是模态和非模态对话框

对话框分为模态对话框和非模态对话框。

所谓模态对话框

所谓模态对话框,会阻塞同一应用程序中其它窗口的输入。同时会阻塞当前线程;程序不再下执行;

关闭  窗口,执行下面的代码,这就是模态对话框

Qt使用QDialog::exec()来实现模态对话框;可以使用 close() 关闭

 

例:

#include<QDialog>


QDialog* dlg = new QDialog(this);
dlg.exec();
非模态对话框

非模态对话框就是在打开它的时候,仍旧能够操作其它的窗口。

Qt使用QDialog::show() 显示非模态对话框  可以使用 close() 关闭

例:

QDialog* dlg = new QDialog(this);
dlg->show();
半模态 不阻塞对话框

会阻塞同一应用程序中其它窗口的输入。show() 之后程序向下执行;不阻塞当前线程

Qt使用QDialog::show()来实现模态对话框;可以使用 close() 关闭

sub 1:

setModal(true);

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

sub 2:

Qt 中的 QWidget 对象自带 setWindowModality(type) ,所以 QWidget  也可以实现半模态

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

 sub 3:  同时 可以用 QWidget setAttribute 来实现;

注意:我尝试了 这个在 QDialog 无效;

pWidget->setAttribute(Qt::WA_ShowModal, true);  //属性设置 true:模态 false:非模态

    QWidget *pWidget = new QWidget();
    pWidget->setAttribute(Qt::WA_ShowModal, true);
    pWidget->show();
    qDebug()<<"ddd";
other: 
setWindowFlags( Qt::WindowStaysOnTopHint |Qt::Dialog);

 理论上 QWidget 是不能实现模态的;只能实现半模态;

    QWidget *pWidget = new QWidget(this);
    //pWidget->setAttribute(Qt::WA_ShowModal, true);
    pWidget->setWindowFlags( Qt::WindowStaysOnTopHint |Qt::Dialog);
    pWidget->show();
    qDebug()<<"ddd";

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恋恋西风

up up up

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值