Python 自定义QTreeview扩展事件方法

Python 自定义QTreeview扩展事件方法,python,pyside,signals-slots,qtreeview,Python,Pyside,Signals Slots,Qtreeview,当我使用定义的“扩展”方法创建自己的自定义QTreeView时,是否需要执行任何特殊操作以发出默认信号?我已经注释掉了表示我所问问题的伪代码。或者我现在做的事情安全吗 class JMTreeView(QtGui.QTreeView): changed = QtCore.Signal() def __init__(self): super(JMTreeView, self).__init__() self.expanded.connect(se

当我使用定义的“扩展”方法创建自己的自定义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)

QTreeView
类没有扩展的
方法。只有一个扩展的
信号。更重要的是,信号和插槽机制完全独立于事件系统,因此与重写受保护的方法(如
showEvent
)没有并行性

大多数事件处理程序(如
showEvent
)都与源于应用程序外部的活动相关。它们通常实现一些默认行为,但有时什么也不做。它们几乎都是虚拟方法,这意味着您可以提供自己的实现,Qt将调用该实现而不是默认实现。如果您的重新实现需要保留默认行为(或以某种方式修改),那么它可以通过调用基类实现来实现

相反,信号总是源于应用程序内部。它们没有默认的处理程序——它们只是广播消息(如无线电信标)。听者完全可以决定如何处理这些消息。不管是否从来没有任何侦听器,或者消息是否从未被处理过