Jak zaimplementować itemChecked i itemUnchecked sygnały dla QTreeWidget w PyQt4?
Gdzie są sygnały itemChecked i itemUnchesked on theQTreeWidget?
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 ()
W tej chwili rozwiązałem to w ten sposób:
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)
Ale to dla mnie złe rozwiązanie, ponieważitemClicked emitowane w naprawdę wielu przypadkach. Emitowano go w przypadku kliknięć lewą / prawą myszą na tekście elementu, co jest absolutnie niepotrzebne (mam ciężkie funkcje w self.handleChecked, a niepotrzebne ich wywołania w menu kontekstowym są kiepskie).
Cóż, próbowałem też użyćitemChanged:
self.treeWidget.itemChanged.connect (self.handle)
ale w ten sposób sytuacja jest jeszcze gorsza! Funkcja self.handle wywołuje się rekurencyjnie w nieskończoność i poza nią, ponieważ moje funkcje w self.handleSprawdzają zmiany danych elementu i ten sygnał jest emitowany ponownie i ponownie. Potrzebuję również sygnału, który emituje tylko przełączanie pola wyboru.
Czy ktoś może mi powiedzieć, co robię źle?