Wie implementiere ich itemChecked- und itemUnchecked-Signale für QTreeWidget in PyQt4?

Wo sind die Signale itemChecked und itemUncheсked auf demQTreeWidget?

Qt Signals: (quote from PyQt4 QTreeWidget documentation page)

void currentItemChanged (QTreeWidgetItem *,QTreeWidgetItem *)
void itemActivated (QTreeWidgetItem *,int)
void itemChanged (QTreeWidgetItem *,int)
void itemClicked (QTreeWidgetItem *,int)
void itemCollapsed (QTreeWidgetItem *)
void itemDoubleClicked (QTreeWidgetItem *,int)
void itemEntered (QTreeWidgetItem *,int)
void itemExpanded (QTreeWidgetItem *)
void itemPressed (QTreeWidgetItem *,int)
void itemSelectionChanged ()

Im Moment habe ich es so gelöst:

self.treeWidget.itemClicked.connect (self.handle)

def handle (item, column): 
    print 'emitted!', item.text(column)
    if item.checkState(column) == QtCore.Qt.Checked:
        # there are a lot of my functions inside which work with item data
        self.handleChecked(item, column)
    elif item.checkState(column) == QtCore.Qt.Unchecked:
        self.handleUnchecked(item, column)

Aber es ist eine schlechte Lösung für mich, weilitemClicked emittiert in sehr vielen Fällen. Es wird bei Links / Rechts-Mausklicks auf den Elementtext ausgegeben, was absolut unnötig ist (ich habe umfangreiche Funktionen in self.handleChecked, und unnötige Aufrufe davon beim Öffnen des Kontextmenüs sind ziemlich mies).

Nun, ich habe auch versucht, zu verwendenitemChanged:

self.treeWidget.itemChanged.connect (self.handle)

aber auf diese Weise ist die Situation noch schlimmer! Die self.handle-Funktion ruft sich rekursiv ins Unendliche und darüber hinaus auf, weil meine Funktionen in self.handleChecked Artikeldaten ändern und dieses Signal immer wieder aussendet. Außerdem brauche ich ein Signal, das nur beim Umschalten des Kontrollkästchens auf Artikel aussendet.

Kann mir jemand sagen, was ich falsch mache?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage