5

在发出信号之前,我需要检查信号是否存在侦听器。

class Test(QObject):
    test = pyqtSignal(str,dict)
    def run(self):
        if self.receivers(SIGNAL("test(str,dict)"):
           self.test.emit('blablabla',{})`

信号连接到正确的插槽并成功发出信号。
检查签名信号时,该方法QObject.receivers()显示该信号未连接。
我明白了,原因是签名不正确,我没有找到方法来指定信号的忠实签名。

4

2 回答 2

8

在 pyqt5 中,不推荐使用 SIGNAL。它被每个 QObject 的信号属性替换

如果QObject .receivers ( QObject .signal ) > 0:

    print('signal connected')

检查 QPushButton 信号 clicked() 是否连接到任何插槽

button = QPushButton()
.
.
if button.receivers(button.clicked) > 0:
    .....
于 2015-09-06T16:27:19.367 回答
5

您的信号的签名是"test(QString, PyQt_PyObject)".

很明显,str被映射到QString和其他本机python对象类型dictlist...被映射到C++类型PyQt_PyObject

信号签名列表可以通过QMetaObject与您的对象关联获得:

test = Test()
metaobject = test.metaObject()
for i in range(metaobject.methodCount()):
    print(metaobject.method(i).signature())
于 2011-10-15T18:38:33.843 回答