QWebEngineView全屏导致弹框异常、弹框不置顶、弹框闪屏等问题

本文探讨了在项目中使用QWebEngineView实现全屏地图时遇到的弹窗异常问题,通过提供两种避免OpenGL相关窗口全屏问题的解决方案,包括移动窗口位置和重写showEvent处理全屏状态,帮助开发者避免视觉缺陷并保持应用稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近一个项目需要用到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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值