gpt4 book ai didi

Qt 5.7 - QWebEngineView - 将 HTML 按钮点击事件连接到 C++/Qt Slot

转载 作者:行者123 更新时间:2023-12-04 18:29:11 24 4
gpt4 key购买 nike

我正在使用 Qt 5.7 QWebEngineView。

如何将 HTML 按钮点击事件连接到 C++/PyQt5 端的 Q_SLOT?

我找不到这方面的明确例子。

最佳答案

我创建了一个桥接 QObject,我在实现这个类时遇到的错误是我忘记添加 @QtCore.pyqtSlot 装饰器,这很重要。

class Bridge(QtCore.QObject):
@QtCore.pyqtSlot()
def some_slot():
print("Slot Invoked")

在这里,我创建了一个QWebEngineView 和一个QWebChannel,并将QWebEnginePage 的网络 channel 设置为该 channel ,反之亦然。

然后我创建了我的 Bridge 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,并且在回调中我处理了点击事件绑定(bind),如您所见。

<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>

引用资料:

关于Qt 5.7 - QWebEngineView - 将 HTML 按钮点击事件连接到 C++/Qt Slot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40821700/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com