2016-11-09 185 views
1

当我使用定义的“扩展”方法创建自己的定制QTreeView时,是否需要执行任何特殊的操作来发出默认信号?我已经注释了代表我所问的伪代码。还是我可以安全地做我目前正在做的事情?自定义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) 

回答

1

QTreeView类不具有expanded方法。只有一个expanded信号。更重要的是,信号和插槽机制与事件系统完全分离,因此与showEvent等覆盖受保护的方法并不相同。

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

相比之下,信号始终始于里面的应用程序。没有默认处理程序 - 它们只是广播消息(如无线电信标)。听众完全可以决定如何处理这些信息。没有任何侦听器,或者如果邮件从未处理过,这并不重要。