在开发项目中有一个需求是将图片操作区域QGraphicsView控件进行全屏显示,然后按下ESC退出全屏,并且进行原样恢复,查阅帮助文档可以使用ShowFullScreen()函数实现,但是需要注意的是showFullScreen() 和showNormal() 只对顶级窗口有效果,对子窗口无效。要将子窗口全屏显示可用以下方法:
将要全屏的 Qt 子窗口调用 setWindowFlags(Qt::Window) 将其类型提升为顶级窗口模式,然后调用 showFullScreen() 函数将子窗口全屏显示。 当然全屏后还要恢复正常,即调用 setWindowFlags(Qt::SubWindow)或者setWindowFlags(Qt::Widget) 将子窗口设置为非顶级窗口,由于之前子窗口本身就保存了父Widget的地址,二者关系一直存在.
子窗体恢复
1.将该窗体恢复类型为Qt::Widget (子窗口又与原来的父Widget建立了关系)
2.调用show方法(如果不调用会被隐藏)
注意:在这里会有一个问题,还原为子窗体后显示,可能会出现大小的问题(即大小不能恢复到原来的大小)
有二种解决方式:
方式一:showNormal() (特别强调子控件未被布局管理器进行管理)
先调用showNormal(),这样就会还原为原来的大小。
注意:这种方式还有一个缺点,屏幕上会闪现一下还原原来大小的窗口,体验感不太好。
方式二:进行布局设计(推荐的方式)
在图中可以看到将子窗体布局,因此在恢复子窗体的时候,会自动调整大小,不需要手动设置,也不会出现遮挡按钮、大小无法恢复以及闪屏的问题。