我试图将通用数据类子类化,以对父级计算的数据执行一些额外的操作。我想在子类中重用dataReady
信号。问题是信号仍然从父节点发出,并在其他计算完成之前触发连接的插槽。
是否可以覆盖/抑制从父类发出的信号,或者我只需要选择不同的信号名称?
这是我班级的简化示例:
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()
答案 0 :(得分:2)
您可以使用blockSignals:
def initData(self):
self.blockSignals(True)
super(MoreSpecific, self).initData()
self.blockSignals(False)
答案 1 :(得分:1)
我只是稍微重组一下这些类。
class Generic(QtCore.QObject):
dataReady = pyqtSignal()
def __init__(self, parent=None):
super(Generic, self).__init__(parent)
def initData(self):
self.computations()
self.dataReady.emit()
def computations(self):
# put your computations in a method
...
class MoreSpecific(Generic):
def __init__(self, parent=None):
super(MoreSpecific, self).__init__(parent)
def computations(self):
super(MoreSpecific, self).computations()
# further computations
现在你的initData
方法应该进行一些计算,然后发送信号,不需要改变,你的MoreSpecific
类只会发送一次信号。