最近一个项目需要用到QWebEngineView实现全屏地图
增加地图模块后发现其他模块的弹窗异常,对话框不置顶,或者弹出后闪屏,注释该模块或者不全屏显示时就是正常的
随后查阅资料了解到好像是Qt的一个bug,QOPenGlWidget、QWebEngineView之类和OpenGL相关的窗口在全屏下就会有问题
所以解决方法就是制造一个伪全屏来防止问题出现,这里给出两种解决方案
1,将全屏窗口整体向上移动一个像素再设置大小,直接在构造函数使用也没问题,比较推荐这个方法
this->setWindowState(Qt::WindowFullScreen);
QRect rect = qApp->desktop()->geometry();
rect.setY(-1);
rect.setHeight(rect.height());
this->setGeometry(rect);
2,使用Qt官方的解决方法,需要重写showEvent,在调用setHasBorderInFullScreen后再设置全屏,因为windowHandle需要在showEvent才有,不能直接放在构造函数中,缺点是会制造出1像素灰色边框不太好看,颜色也不太好改,参考资料:Qt for Windows - 特定问题 |Qt 5.15
#include <QtPlatformHeaders/QWindowsWindowFunctions>
void MainWnd::showEvent(QShowEvent*)
{
QWindowsWindowFunctions::setHasBorderInFullScreen(this->windowHandle(), true);
this->setWindowState(Qt::WindowFullScreen);
}