函数功能:
- 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)的主要工作就是:
- 更新styleSheet:通过QCoreApplication::sendEvent发送QEvent::Polish
- 更新geometry:通过CoreApplication::postEventf发送QEvent::LayoutRequest
- 更新resize:通过QCoreApplication::sendEvent发送QResizeEvent
- 最终调用show_helper();
更新styleSheet
更新geometry
更新resize
实际调用更新主界面的代码段:
最终会在show_helper内部发送QUpdateLaterEvent事件,然后通过事件循环机制进行update();
如果你在监控show过程中的事件,那么在updateLater事件前,应该是先处理QEvent::Polish、QResizeEvent,再处理showEvent事件,最终post发送updateLater事件;
且show_helper()会有段代码sendPendingMoveAndResizeEvents(); 保证接受到move和resize事件