1
我正在使用Qt 5.7 QWebEngineView。Qt 5.7 - QWebEngineView - 將HTML按鈕單擊事件連接到C++/Qt插槽
如何HTML按鈕單擊事件連接到C++/PyQt5側Q_SLOT?
我找不到一個明確的例子。
我正在使用Qt 5.7 QWebEngineView。Qt 5.7 - QWebEngineView - 將HTML按鈕單擊事件連接到C++/Qt插槽
如何HTML按鈕單擊事件連接到C++/PyQt5側Q_SLOT?
我找不到一個明確的例子。
我創建了一個橋QObject,我在實現這個類時遇到的錯誤是我忘了添加@QtCore.pyqtSlot
裝飾器,這很重要。
class Bridge(QtCore.QObject):
@QtCore.pyqtSlot()
def some_slot():
print("Slot Invoked")
在這裏,我創建了一個QWebEngineView
和QWebChannel
並設置QWebEnginePage
的Web信道爲信道,並且反之亦然。
然後我創造了我的QObject橋在self.helper_bridge
第一我沒有用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)
...
最後,index.html
頁,
請注意Qt提供的第二個腳本。
在這裏,我創建了一個QWebChannel
實例給予我的傳輸:qt.webChannelTransport
,並在回調中我處理了點擊事件綁定,你可以看到。
<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>
參考文獻: