我正在使用Qt 5.7 QWebEngineView。
如何将HTML按钮单击事件连接到C ++ / PyQt5侧的Q_SLOT?
我找不到一个明确的例子。
我创建了一个桥接QObject,实现此类时遇到的错误是我忘记添加@QtCore.pyqtSlot装饰器,这一点很重要。
class Bridge(QtCore.QObject):
@QtCore.pyqtSlot()
def some_slot():
print("Slot Invoked")
Run Code Online (Sandbox Code Playgroud)
在这里,我创建了一个QWebEngineView和一个QWebChannel,并将的网络频道设置QWebEnginePage为该频道,反之亦然。
然后,我首先创建了self.helper_bridge我自己不使用的Bridge QObject ,self只是helper_bridge自己使用了它,当然这使我的应用崩溃了
class MainWidget(object):
def __init__(self):
...
self.webView = QtWebEngineWidgets.QWebEngineView(parent)
channel = QtWebChannel.QWebChannel(self.webView.page())
self.webView.page().setWebChannel(channel)
self.helper_bridge = Bridge()
channel.registerObject("helperBridge", self.helper_bridge)
url = QtCore.QUrl("file:///path/to/index.html")
self.webView().page().load(url)
...
Run Code Online (Sandbox Code Playgroud)
最后,index.html页面
请注意Qt提供的第二个脚本。
在这里,我创建了QWebChannel给定传输方式的实例:qt.webChannelTransport,并且在回调内部,您可以看到click事件绑定。
<html>
<head>
</head>
<body>
<script src='https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js'</script>
<script src='qrc:///qtwebchannel/qwebchannel.js'></script>
<h1>hello</h1>
<ul>
<li>list item 1</li>
<li>list item 2</li>
</ul>
<a href='#go'>GO</a>
<script>
$(document).ready(function(){
new QWebChannel(qt.webChannelTransport, function(channel){
$('h1').on('click', function({
channel.objects.helperBridge.some_slot()
});
});
});
</script>
</body>
Run Code Online (Sandbox Code Playgroud)
参考文献:
| 归档时间: |
|
| 查看次数: |
1387 次 |
| 最近记录: |