QWebEngineView 如何和qt交互
时间: 2024-06-08 16:09:46 浏览: 203
qt与前端消息交互
QWebEngineView 是 Qt 提供的一个用于显示 Web 内容的组件,它基于 Chromium 内核,支持现代 Web 技术和 HTML5 标准。
如果要在 QWebEngineView 中与 Qt 进行交互,可以通过以下几个步骤实现:
1. 创建一个 QWebEnginePage 子类,重写其 createWindow 方法,用于拦截新窗口的打开。
2. 在 QWebEngineView 中设置该 QWebEnginePage 子类的实例,以便在浏览器中打开链接时能够被拦截。
3. 使用 Qt 的信号和槽机制,在 QWebEnginePage 子类中处理与 Qt 的交互事件。
下面是一个简单的例子,演示如何在 QWebEngineView 中与 Qt 进行交互:
```python
from PyQt5.QtCore import QUrl, pyqtSlot
from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEnginePage
from PyQt5.QtWidgets import QApplication
import sys
class MyWebEnginePage(QWebEnginePage):
def __init__(self, parent=None):
super().__init__(parent)
def createWindow(self, QWebEnginePage_WebWindowType):
new_page = MyWebEnginePage(self)
new_view = QWebEngineView()
new_view.setPage(new_page)
new_view.show()
return new_page
@pyqtSlot(str)
def js_callback(self, result):
print(result)
if __name__ == '__main__':
app = QApplication(sys.argv)
view = QWebEngineView()
page = MyWebEnginePage(view)
view.setPage(page)
view.load(QUrl("https://www.baidu.com"))
# 注册一个 JavaScript 回调函数
page.runJavaScript("window.my_callback = function(result) {pyjsqt.js_callback(result)}")
sys.exit(app.exec_())
```
在这个例子中,我们创建了一个名为 MyWebEnginePage 的 QWebEnginePage 子类,它重写了 createWindow 方法,用于在打开新窗口时拦截并创建新的 QWebEnginePage 实例。
同时,我们在 MyWebEnginePage 中注册了一个名为 js_callback 的 Python 回调函数,在 JavaScript 中可以通过 window.my_callback 来调用该回调函数,并传递一个字符串参数。
在主程序中,我们创建了一个 QWebEngineView 实例,并使用 MyWebEnginePage 的实例作为其页面。然后,我们通过 QWebEnginePage 的 runJavaScript 方法注册了一个 JavaScript 回调函数,并在其中调用了 MyWebEnginePage 中的 Python 回调函数。
当在浏览器中打开一个链接时,如果该链接指向一个新的窗口,MyWebEnginePage 的 createWindow 方法将会被触发,我们将会创建一个新的 QWebEngineView 实例,并将其设置为新的 QWebEnginePage 的页面,从而达到在同一个程序中打开新窗口的效果。
当 JavaScript 回调函数被触发时,它将会调用 MyWebEnginePage 的 Python 回调函数,从而实现了在 QWebEngineView 中与 Qt 的交互。
阅读全文