Qt实现 模态对话框以及窗口置顶

一、模态对话框和非模态对话框的概念

1、模态对话框,就是当其弹出后,会置于窗口最上层,软件的其他窗口无法接受用户点击和输入,只有其在被关闭后,其他窗口才能继续和用户交互。模态对话框的应用场景广泛,比如弹出式参数设置对话框,需要确保用户手动确定或者关闭。比如windows里的环境变量窗口:

这时候如果不点击确定或者取消以及右上角的关闭,我们就无法点击系统属性窗口。

2、非模态对话框,它弹出后,软件的其他窗口仍能与用户交互,比如以下:

点击了高级系统设置,弹出系统属性窗口,仍然能对系统窗口做操作,

所以系统属性窗口相对于系统窗口而言,就是非模态对话框。

二、在Qt中,通常是使用QDialog或者QWidget作为弹出式窗口

以下分别对二者如何设置模态做一个比较和结论。

如果是QDialog:

1、通过以下语句设置,即为模态,父对象地址传入与否,不影响模态的效果。

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

2、或者通过show()函数,前提是需要通过setModal()设置为模态。

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

如果是QWidget:

QWidget需要调用setWindowMondality()函数来设置模态属性,否则默认为非模态。

QWidget *w = new QWidget(this);
w->setWindowModality(Qt::ApplicationModal);

setWindowMondality()函数接受枚举值以设置不同的效果,分别是:

Qt::ApplicationModal 表示该窗口阻塞程序的所有窗口。

Qt::WindowModal 表示阻塞它的父窗口,所有祖先窗口以及它们的子窗口。

Qt::NonModal 表示不阻塞任何窗口,就是非模态。

三、Qt窗口置顶显示的两种方式

_dock->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::Dialog);

SetWindowPos(reinterpret_cast<HWND>(_dock->winId()), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);

窗口置顶表示该窗口位于一切窗口之上,其他的窗口拖过来,也会被其遮挡。

  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值