Qt show(), showNormal(), showMinimized(),showMaximized()之间的差别和用法,show()函数的核心流程

本文详细介绍了Qt中与窗口显示状态相关的函数,如show()、showNormal()、showMinimized()和showMaximized(),强调了isVisible()和isMinimized()的区别。同时,解析了setVisible()函数的工作原理,涉及到的事件包括QEvent::Polish、QResizeEvent以及界面更新的流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

函数功能:

  • show():显示继承自QWidget的窗口;
  • showNormal():回归正常状态,一般是指最大化、最小化的恢复;
  • showMinimized():最小化窗口显示,isVisible()为true,isMinimized()为true;
  • showMaximized():最大化窗口显示,isVisible()为true,isMaximized()为true;
    在这里插入图片描述
    实际上,show(), showNormal(), showMinimized(),showMaximized()的visible状态都是true,因为它们都会调用setVisible(true),结果就是对于窗口而言,isVisible()判断返回的是true;对于最小化窗口这里就会有一个小陷阱,我们不能用isVisible()判断,而是必须用isMinimized()判断。

setVisible()函数:

在这里插入图片描述
所有的showXXX函数都是会调用setVisible(true),往里看看:
代码路径:qtbase\src\widgets\kernel\qwidget.cpp
void QWidgetPrivate::setVisible(bool visible) ;
setVisible(true)的主要工作就是:

  1. 更新styleSheet:通过QCoreApplication::sendEvent发送QEvent::Polish
  2. 更新geometry:通过CoreApplication::postEventf发送QEvent::LayoutRequest
  3. 更新resize:通过QCoreApplication::sendEvent发送QResizeEvent
  4. 最终调用show_helper();

更新styleSheet

在这里插入图片描述

更新geometry

在这里插入图片描述

更新resize

在这里插入图片描述
实际调用更新主界面的代码段:
在这里插入图片描述
最终会在show_helper内部发送QUpdateLaterEvent事件,然后通过事件循环机制进行update();

如果你在监控show过程中的事件,那么在updateLater事件前,应该是先处理QEvent::Polish、QResizeEvent,再处理showEvent事件,最终post发送updateLater事件;

且show_helper()会有段代码sendPendingMoveAndResizeEvents(); 保证接受到move和resize事件

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值