WebEnginePage::acceptNavigationRequest接收不到超链接的鼠标左键点击事件
时间: 2024-01-06 19:03:31 浏览: 123
JavaScript 模拟用户单击事件
5星 · 资源好评率100%
如果你在重写`acceptNavigationRequest`方法时无法接收到鼠标左键点击事件,可能是因为你没有正确设置QWebEnginePage的父对象。
在默认情况下,QWebEnginePage是没有父对象的,如果你只是简单地创建一个MyWebEnginePage对象,并将其设置为QWebEngineView的页面,那么它将不会接收到任何事件。
要解决这个问题,你可以将QWebEnginePage设置为QWebEngineView的父对象,这样它就能正确地接收到事件了。下面是一个示例代码:
```python
from PyQt5.QtCore import QUrl
from PyQt5.QtWebEngineWidgets import QWebEnginePage, QWebEngineView
class MyWebEnginePage(QWebEnginePage):
def __init__(self, parent=None):
super().__init__(parent)
self.setParent(parent)
def acceptNavigationRequest(self, url, _type, isMainFrame):
if _type == QWebEnginePage.NavigationTypeLinkClicked:
print('Link clicked:', url)
return False
return super().acceptNavigationRequest(url, _type, isMainFrame)
if __name__ == '__main__':
from PyQt5.QtWidgets import QApplication
import sys
app = QApplication(sys.argv)
view = QWebEngineView()
page = MyWebEnginePage(view)
view.setPage(page)
view.load(QUrl('https://www.baidu.com'))
view.show()
sys.exit(app.exec_())
```
在这个例子中,我们通过将MyWebEnginePage的父对象设置为QWebEngineView来解决了接收不到鼠标左键点击事件的问题。此外,我们还重写了`__init__`方法,将QWebEngineView设置为MyWebEnginePage的父对象。这样,当MyWebEnginePage接收到事件时,它的父对象就是QWebEngineView,事件就能正确地传递到它了。
阅读全文