当前位置:网站首页>在QWidget上实现窗口阻塞

在QWidget上实现窗口阻塞

2022-07-06 08:53:00 InfoQ



前提概要

在我们想实现阻塞窗口时,第一反应就是QDialog的模态窗口,但是由于QDialog无法正常使用等情况(自己就遇到了这个问题),那我们就要找别的方法了。接下来展示在QWidget的非模态窗口下实现阻塞效果。

代码展示:

Widget = new QWidget;

Widget->setWindowFlags(Widget->windowFlags() |Qt::Dialog);

Widget->setWindowModality(Qt::ApplicationModal); //阻塞除当前窗体之外的所有的窗体

setWindowFlags 可用来设置窗口的属性,他的属性种类可分为很多种(大家有兴趣的可以查一查,我就只介绍所使用的以及一些简单的)。

Qt::Dialog可想而知,它是相当于吧Qwidget强转于QDialog的,但是他有强迫的不是那么明显,但是它使用的是QDialog构造函数的默认值,因此才可以使QWidget实现组合窗口的效果。同理可得,Qt::Widget和Qt::Window一样。可通过举一反三去思考他们的用法,但是在自己动脑后一定记得要去查,鉴别是否完全正确。

Widget->windowFlags()是获取Widget的当前属性。

新学习的内容

在查资料的过程中发现,Qt::ToolTip可设置此窗口为提示窗口,但是没有标题栏和窗口的边框。

总结

如果可以正常使用QDialog作为模态化窗口,那最为推荐的是系统默认的,而这种强转实现的窗口阻塞只在迫不得已的情况下推荐。毕竟自带的肯定是有它的稳定性以及它的好处,否则开发者就不会这样做了。并且这种方法使用起来比较容易出现思路混乱,容易形成不好的习惯,就像我现在在创建新的界面是都是习惯性的使用QWidget,以后一定要修正这个不好的习惯,也希望大家不要向我学习。

今天的更文到此结束,希望大佬批评指教!
原网站

版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://xie.infoq.cn/article/df4c2a3baff24f86dd0ebe403