我想要子类化一个通用数据类来对父级计算的数据执行一些额外的操作。我想重用子类中的dataReady
信号。问题是信号仍然从父母发出,并在额外的计算完成之前触发连接的插槽。覆盖子类中的PyQt信号
是否可以覆盖/抑制从父类发出的信号,还是我只需要选择不同的信号名称?
这是我班的一个简单的例子:
class Generic(QtCore.QObject):
dataReady = pyqtSignal()
def __init__(self, parent=None):
super(Generic, self).__init__(parent)
def initData(self):
# Perform computations
...
self.dataReady.emit()
class MoreSpecific(Generic):
dataReady = pyqtSignal()
def __init__(self, parent=None):
super(MoreSpecific, self).__init__(parent)
def initData(self):
super(MoreSpecific, self).initData()
# Further computations
...
self.dataReady.emit()
谢谢,这回答我的问题。但是,看起来这种方法不会延伸到更高的继承级别 – user3419537
@ user3419537。是的,它确实。无论继承如何,它都会阻止*全部*信号。但是,'super'不是用来在继承层次结构中调用* specific *类的。为此,您应该绕过计算的方法解析顺序并直接引用类(例如'BaseClass.initData(self)')。 – ekhumoro
我意识到,问题是调用也会解除所有信号而不管继承,所以如果我有一个孩子使用这个方法,并且父构造函数调用'blockSignals(False)'并发出信号,那么这个否定在子构造函数中调用'blockSignals(True)'的效果。 – user3419537