QT项目,设置了很多模态的窗口,关闭模态窗口后,偶尔会出现主窗口被其他窗口挡住的情况,有时又是必现。刚开始没当回事,直到。。。。直到测试人员提了BUG,才开始重视起来。
百思不得其解,终于搜到这篇文章,有详细的说明
https://blog.csdn.net/lindexi_gd/article/details/51704599
https://walterlv.gitee.io/post/fix-owner-window-dropping-down-when-close-a-modal-child-window.html
文中提到,该问题是windows的BUG,问题原因是,在模态窗口关闭的时候,Windows 会找一个在这个窗口下方的第一个可用的窗口,激活他。因为弹出模态窗口的主窗口是被禁用的。所以在模态窗口关闭的时候,就忽略了主窗口可以激活,于是找到主窗口下方的一个可以被激活的窗口,这时激活他,于是这个被找到的窗口就在主窗口的上面。
解决方式:
在模态窗口关闭时激活主窗口即可:
void activeWindow()
{
this->show();
this->raise();
this->activateWindow();
}