PyQt und QTreeView: eine Verbindung herstellen möchten, das selectionChanged-signal
Ich versuche mich zu verbinden, um das selectionChanged-signal von einem QTreeView mit PyQt. Ich habe dies in der Vergangenheit getan (für ein QTableView) und war erfolgreich. Aber jetzt kann ich Sie nicht get-ähnlichen code zu arbeiten.
In den folgenden code Beispiel habe ich erfolgreich eine Verbindung zu den auf-und zugeklappt-Signale, aber nicht das selectionChanged-oder aktiviert Signale. Könnte mir jemand sagen was ich falsch mache? Danke.
from PyQt4 import QtGui
from PyQt4 import QtCore
################################################################################
class ShaderDefTreeView(QtGui.QTreeView):
"""
Overrides the QTreeView to handle keypress events.
"""
#---------------------------------------------------------------------------
def __init__(self, parent=None):
"""
Constructor for the ShaderDefTreeView class.
"""
super(ShaderDefTreeView, self).__init__(parent)
#listen to the selectionChanged signal
print "Connecting"
#whenever the selection changes, let the data model know
self.connect(self,
QtCore.SIGNAL("selectionChanged(QItemSelection&, QItemSelection&)"),
self.store_current_selection)
self.connect(self, QtCore.SIGNAL("activated(const QModelIndex &)"),
self.activated)
self.connect(self, QtCore.SIGNAL("collapsed(const QModelIndex &)"),
self.collapsed)
self.connect(self, QtCore.SIGNAL("expanded(const QModelIndex &)"),
self.expanded)
#---------------------------------------------------------------------------
def store_current_selection(self, newSelection, oldSelection):
print "changed"
#self.model().selection_changed(newSelection)
#---------------------------------------------------------------------------
def expanded(self, newSelection):
print "expanded"
#---------------------------------------------------------------------------
def collapsed(self, newSelection):
print "collapsed"
#---------------------------------------------------------------------------
def activated(self, newSelection):
print "activated"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ok, dachte es sich (meist durch Unfall).
Da machte ich die verbindungen in der init aber nur die Einstellung des Modells für diese QTreeView später, gab es keine gültige selectionModel im Ort.
In Ordnung, damit es funktioniert musste ich zwei änderungen:
1) Das emittierende Objekt musste geändert werden, um die QTreeView das selectionModel. Ich weiß nicht, warum, aber einige (seltene) Beispiele, die web vorgeschlagen, dass dies möglicherweise der Fall sein
und
2) ich hatte zum überschreiben der setModel-Methode der QTreeView, so dass es ruft die Superklasse' setModel-Methode und macht dann die verbindungen danach.
Also der neue code sieht wie folgt aus:
Wenn Sie durch deklarative können Sie etwas tun: