写点什么

在 QWidget 上实现窗口阻塞

作者:用户10086
  • 2022 年 7 月 06 日
  • 本文字数:654 字

    阅读完需:约 2 分钟


前提概要

在我们想实现阻塞窗口时,第一反应就是 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,以后一定要修正这个不好的习惯,也希望大家不要向我学习。


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

发布于: 刚刚阅读数: 3
用户头像

用户10086

关注

还未添加个人签名 2022.07.01 加入

还未添加个人简介

评论

发布
暂无评论
在QWidget上实现窗口阻塞_qt_用户10086_InfoQ写作社区