在 qml 中捕获信号参数

Posted

技术标签:

【中文标题】在 qml 中捕获信号参数【英文标题】:Capture signal parameter in qml 【发布时间】:2016-11-14 12:46:12 【问题描述】:

我有一个基于 QObject 的 python 类如下:

from PyQt5.QtCore import QObject, pyqtSlot, pyqtProperty, pyqtSignal

class Validator(QObject):
    authFailed = pyqtSignal(str, arguments=['value'])

    def __init__(self, parent=None):
        super(Validator, self).__init__(parent)

    @pyqtslot
    def test(self):
        self.authFailed.emit("Failed")

在 qml 方面,我可以这样收听这个信号:

Validator 
    onAuthFailed:                 
       

    id: validator

但是,我不确定如何捕获同样从信号发出的 str 参数(Failed 消息)。当我尝试类似:onAuthFailed(msg) 签名时,编译失败。

【问题讨论】:

我不知道你的问题的解决方案,我只是在这里告诉你 Python 不是被编译而是被解释的。因此,您可以拥有一个交互式解释器。 【参考方案1】:

我不知道 PyQt...

通常,在 QML 中,您只需使用名称即可访问信号参数。

据此: http://pyqt.sourceforge.net/Docs/PyQt5/signals_slots.html#PyQt5.QtCore.pyqtSignal

您在arguments=['value']-list 中传递的字符串是名称,用于将参数公开给QML。 所以我很确定,你可以在 QML 的处理程序中使用变量value

试试:

onAuthFailed: console.log('auth Failed: ', value)

【讨论】:

谢谢!完成了这项工作!

以上是关于在 qml 中捕获信号参数的主要内容,如果未能解决你的问题,请参考以下文章

如何捕获 QML 中更改值的 Spinbox 事件?

Qml 注册类型的构造函数中的发射信号不起作用

QML - 捕获子对象的所有 UI 事件

如何捕获 QML 绘图缓冲区

C语言signal()函数(通过设置一个函数(回调函数)来处理捕获到异常信号时需要执行的操作)

shell从入门到精通(10)信号捕获和处理