QTreeWidget のitemCheckedシグナルと itemUnchecked シグナルはどこにありますか?
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 ()
現時点では、次のように解決しました。
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)
しかし、非常に多くの場合にitemClickedが発行されるため、これは私にとっては悪い解決策です。これは、項目テキストの左/右マウス クリックの場合に発生しますが、これは絶対に不要です (self.handleChecked 内に重い関数があり、コンテキスト メニューを開いたときに不要な関数を呼び出すのはかなりお粗末です)。
さて、私もitemChangedを使用しようとしました:
self.treeWidget.itemChanged.connect (self.handle)
しかし、この方法では状況はさらに悪化します。self.handle 関数は、self.handleChecked 内の私の関数が項目データを変更し、このシグナルが何度も何度も発行されるため、無限に再帰的に自分自身を呼び出します。また、項目チェックボックスの切り替え時にのみ発する信号が必要です。
誰かが私に何を間違っているのか教えてもらえますか?