在 Qt 例子中(Examples/Qt-5.15.0/webenginewidgets/simplebrowser)重写webview::mouseReleaseEvent() 发现鼠标点击网页之后,并没有执行这个函数。
通过Google发现这个问题是存在的,不仅鼠标事件捕捉不到,paint事件等也捕获不到,https://stackoverflow.com/questions/30566101/how-can-i-get-paint-events-with-qtwebengine。
通过安装事件过滤器来捕获:
- 构造函数中
QApplication::instance()->installEventFilter(this);
- 重写eventFilter
bool WebView::eventFilter(QObject *object, QEvent *event)
{
if(object->parent() == this)
{
QEvent::Type et = event->type();
switch(et)
{
case QEvent::MouseButtonPress:
mousePressEvent(static_cast<QMouseEvent *>(event));
break;
case QEvent::MouseButtonRelease:
mouseReleaseEvent(static_cast<QMouseEvent *>(event));
break;
case QEvent::MouseMove:
mouseMoveEvent(static_cast<QMouseEvent *>(event));
break;
default:
break;
}
}
return false;
}
以上两步解决问题。