2016-11-09 10 views
1

Wenn ich mein eigenes benutzerdefiniertes QTreeView mit einer definierten "erweiterten" Methode erstelle, muss ich etwas Spezielles tun, um das Standardsignal auszugeben? Ich habe einen Pseudo-Code auskommentiert, der darstellt, wonach ich frage. Oder bin ich sicher, was ich gerade tue?Benutzerdefinierte erweiterte QTreeview-Ereignismethode

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) 

ähnlich wie ich handhabe, wenn ich die ‚Showevent‘ für einen Dialog außer Kraft setzen, nenne ich die ‚super‘ am Ende der Funktion. Muss ich etwas hinzufügen, das meiner "erweiterten" Methode ähnlich ist?

def showEvent(self, event): 
    geom = self.frameGeometry() 
    geom.moveCenter(QtGui.QCursor.pos()) 
    self.setGeometry(geom) 
    super(Browser, self).showEvent(event) 

Antwort

1

Die QTreeView Klasse keine expanded Methode haben. Es gibt nur ein expanded Signal. Genauer gesagt ist der Signal- und Slots-Mechanismus vollständig vom Event-System getrennt, so dass es keine Parallele zum Überschreiben geschützter Methoden wie showEvent gibt.

Die meisten Ereignishandler (wie showEvent) sind mit der Aktivität verbunden, die außerhalb der Anwendung stammt. Sie implementieren normalerweise ein Standardverhalten, tun aber manchmal gar nichts. Sie sind fast immer virtuelle Methoden, was bedeutet, dass Sie Ihre eigene Implementierung bereitstellen können, die Qt anstelle des Standards aufrufen wird. Wenn die Neuimplementierung das Standardverhalten beibehalten (oder in irgendeiner Weise ändern) muss, kann dies durch Aufrufen der Basisklassenimplementierung erfolgen.

Im Gegensatz dazu stammen Signale immer innerhalb der Anwendung. Es gibt keine Standard-Handler für sie - sie senden einfach Nachrichten (wie ein Funkfeuer). Es liegt ganz bei den Zuhörern, zu entscheiden, was mit den Nachrichten geschehen soll. Es spielt keine Rolle, ob niemals Listener vorhanden sind oder ob die Nachrichten nie verarbeitet werden.

Verwandte Themen