将QWebEngineView添加到QStackedWidget或QTabWidget中导致切换按钮失效的解决方案
问题描述:将QWebEngineView添加到QStackedWidget或QTabWidget中导致切换按钮失效,如果只有两个来回切的话,是没有问题的,当出现多个页面的时候,就会切换失灵。
解决思路:将QWebEngineView浮到上面,只要实现大小、位置、显示隐藏与主页面同步即可。
QWebEngineView窗口构造窗口添加:
setWindowFlags(Qt::WindowStaysOnTopHint| Qt::ToolTip);
一、主窗口关键代码:
//态势感知 m_CesiumMirrorWidget = new CesiumMirrorWidget(); m_pCesium = new CesiumPlugin(); //初始化中间容器 ui.stackedWidget->addWidget(m_CesiumMirrorWidget); ui.stackedWidget->addWidget(m_pMidWidgetRWSL); ui.stackedWidget->addWidget(m_pMidWidgetFANZ); ui.stackedWidget->setCurrentWidget(m_CesiumMirrorWidget); m_pCesium->show();
其中m_CesiumMirrorWidget是用于占位置的假窗口,到时会被遮挡住,我称为镜像文件, m_pCesium是我的QWebEngineView窗口。
二、实时调整窗口的大小
void QtCommHtmlDemo::paintEvent(QPaintEvent *event) { if (ui.stackedWidget->currentWidget() == m_CesiumMirrorWidget) { QPoint pos = m_CesiumMirrorWidget->pos(); QPoint globalPos = ui.stackedWidget->mapToParent(pos); if (isActiveWindow()) { if (m_pCesium) { m_pCesium->move(globalPos); m_pCesium->resize(m_CesiumMirrorWidget->size()); } } } }
三、根据事件更改显示隐藏
void QtCommHtmlDemo::changeEvent(QEvent *event) { if (event->type() == QEvent::ActivationChange) { if (isActiveWindow() || m_pCesium->isActiveWindow()) { //空 }else { if (m_pCesium) { m_pCesium->move(0, 0); m_pCesium->resize(1, 1); } } } }
注:在页面之间切换时,只控制对应的m_pCesium->hide()、m_pCesium->show()即可。
.
标签:
QT
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!