Skip to content

讨论: QWebChannel中,js获取到的Signal存在差异 #40

@Singein

Description

@Singein

老哥,想更你讨论一下下面这种情形,如若你知道些什么,还望赐教一二:
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就无法正常的进行我们的回调函数了。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions