-
-
Notifications
You must be signed in to change notification settings - Fork 2k
Closed
Labels
Description
老哥,想更你讨论一下下面这种情形,如若你知道些什么,还望赐教一二:
QWebChannel允许我们JS和PyQt之间使用信号与槽进行通信,但是我发现一个很奇怪的问题:
一个button,设置其点击的槽函数为发送我们的信号,该信号将在qwebchannel.js中进行接受处理:
this.transport.onmessage = function (message) {
var data = message.data;
console.warn(data); // 我们在这里把消息数据打印出来
if (typeof data === "string") {
data = JSON.parse(data);
}
switch (data.type) {
case QWebChannelMessageTypes.signal:
channel.handleSignal(data);
break;
case QWebChannelMessageTypes.response:
channel.handleResponse(data);
break;
case QWebChannelMessageTypes.propertyUpdate:
channel.handlePropertyUpdate(data);
break;
default:
console.error("invalid message received:", message.data);
break;
}
}
然后奇怪的问题来了:
图形化界面对Button点击,执行槽函数,槽函数中发送相关信号:
js: {"args":[""],"object":"agent","signal":5,"type":1}
一切都很正常。
但是如果我直接在代码中对button对象执行button.click()
:
js: {"data":{"agent":{"methods":[["deleteLater",3],["data_pack_received",6]],"properties":[[0,"objectName",[1,2],""]],"signals":[["destroyed",0],["send_data_pack",5]]}},"id":0,"type":10}
这里的信号就被标记为被破坏了,然后js就无法正常的进行我们的回调函数了。