问题现象
最小化之后,缩略图里的 qtwebengine 显示空白。
问题分析
1.确认是否是 qtwebengine 特有问题
测试分析 QWidget 是正常的,但是 QWebengineView 最小化之后,缩略图里不显示。
结论:qtwebengine 特有问题。
2.确认 QWidget 与 QWebengineView 区别
查看代码 QWebengineView 继承于 QWidget,并且对其 hideEvent 方法重写。
1 | void QWebEngineView::hideEvent(QHideEvent *event) |
既然 QWidget 正常,怀疑是 page()->d_ptr->wasHidden();所致。
所以进行以下测试,在 demo 中再次定义 MyWebview 类,继承 QWebengineView,重写 hideEvent。
1 | #ifndef MYWEBVIEW_H |
发现能够规避问题。
结论:page()->d_ptr->wasHidden();导致问题。
3.深挖page()->d_ptr->wasHidden();
最后调用的是m_webContents->WasHidden();
。
WasShown/WasHidden是用来控制在屏幕上能否可见,qtwebengine直接调用了WasHidden自然是不可见了。
参考这个说明,貌似开始捕捉时会通过WebContents::should_normally_be_visible()来阻止WebContents::WasHidden。
结论:qtwebengine 没有这个机制。
问题解决
重写 hideEvent 方法规避。