当前位置:   article > 正文

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

shownormal

函数功能:

  • 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事件

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/974357
推荐阅读
相关标签
  

闽ICP备14008679号