问题描述:将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()即可。