我想有一个pyqt信号,该信号可以使用python“ object”子类参数或None发出.例如,我可以这样做:
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等效的“ NULL”.但是似乎都不起作用.我需要做些什么才能使这项工作?
解决方法:
尝试失败的原因有两个.
首先,pyqtSignal的type参数接受python类型对象或给出C对象名称的字符串(即Qt类).
因此,要将None用作参数类型,必须传递type(None)而不是字符串“ None”.
其次,“无”是一种特殊情况,以允许使用信号的默认过载而无需显式选择签名.
因此,如果您这样创建信号:
valueChanged = QtCore.pyqtSignal([MyClass], [type(None)])
然后尝试发出这样的信号:
self.valueChanged[type(None)].emit(None)
您将收到如下错误:
TypeError: Window.valueChanged[MyClass].emit():
argument 1 has unexpected type 'NoneType'
因此,使用valueChanged [type(None)]实际上会导致选择默认签名([MyClass]),然后将收到不匹配的参数None.