我想要一个pyqt信号,它可以用python“object”子类参数发出,也可以不发出。例如,我可以这样做:
valueChanged = pyqtSignal([MyClass], ['QString'])
但不是这个:
valueChanged = pyqtSignal([MyClass], ['None'])
TypeError: C++ type 'None' is not supported as a pyqtSignal() type argument type
或者这个:
valueChanged = pyqtSignal([MyClass], [])
TypeError: signal valueChanged[MyObject] has 1 argument(s) but 0 provided
我也尝试了没有引号和c++等价的“空”。但两种方法都不管用。我需要做什么才能让这件事成功?
您不需要指定第二个选项-它将接受类类型的指针,该指针已经可以是None值:
一个棘手的解决方法是定义要发出的信号
object
。因为None
和MyClass
都是从object
继承的,所以工作正常。这不需要在槽中浇铸。使用PyQt5 5.11.3和Python 3.5.6
信号
槽
你所尝试的没有成功有几个原因。
首先,^ {< CD1>}参数^ ^ {CD2>}接受Python ^ {< CD1>}对象,或接受C++对象名称的字符串(即Qt类)。
因此,要使用
None
作为参数类型,必须传递type(None)
,而不是字符串"None"
。其次,
None
是特殊情况,允许在不显式选择签名的情况下使用信号的默认重载。所以,如果你创建了这样的信号:
然后试图发出这样的信号:
会出现这样的错误:
因此,使用
valueChanged[type(None)]
实际上会导致选择默认的签名([MyClass]
),然后会收到一个不匹配的参数None
。相关问题 更多 >
编程相关推荐