当我使用定义的“扩展”方法创建自己的自定义QTreeView时,是否需要执行任何特殊操作才能发出默认信号?我已经注释掉了代表我所询问的伪代码。或者我可以安全地做我目前正在做的事情吗?
class JMTreeView(QtGui.QTreeView):
changed = QtCore.Signal()
def __init__(self):
super(JMTreeView, self).__init__()
self.expanded.connect(self.expanded_item)
def expanded_item(self, event):
print "expanded"
# super(JMTreeView, self).expanded(event)
类似于当我覆盖对话框的'showEvent'时我处理的方式,我在函数的末尾调用'super'。我是否需要添加类似于“扩展”方法的内容?
def showEvent(self, event):
geom = self.frameGeometry()
geom.moveCenter(QtGui.QCursor.pos())
self.setGeometry(geom)
super(Browser, self).showEvent(event)
答案 0 :(得分:1)
QTreeView
类没有expanded
方法。只有expanded
信号。更重要的是,信号和插槽机制与事件系统完全分离,因此不会与覆盖showEvent
等受保护方法并行。
大多数事件处理程序(如showEvent
)与源自应用程序外部的活动相关。它们通常会实现某些默认行为,但有时根本不执行任何操作。它们几乎总是虚拟方法,这意味着您可以提供自己的Qt将调用而不是默认的实现。如果重新实现需要保持默认行为(或以某种方式修改它),它可以通过调用基类实现来实现。
相比之下,信号总是来自内部应用程序。它们没有默认处理程序 - 它们只是广播消息(如无线电信标)。完全由听众决定如何处理消息。如果从来没有任何听众,或者从未处理过这些消息,那就无所谓了。