• 6828阅读
  • 3回复

[提问]关于treewidget的用复选框问题 [复制链接]

上一主题 下一主题
离线kamatyo
 

只看楼主 倒序阅读 楼主  发表于: 2011-08-21
我用treewidget创建一棵树,建item时用setCheckState(0, Qt.Unchecked)显示复选框。

并创建slot,点击item时若复选框未选中,则选之,选中则取消:
@pyqtSlot(QTreeWidgetItem, int)
    def on_treeWidget_itemClicked(self, item, column):
        if item.checkState(column) == Qt.Checked:
            item.setCheckState(column, Qt.Unchecked)
        else:
            item.setCheckState(column, Qt.Checked)

但如此一来,我点击复选框无效,复选框状态不会改变,只有点击item的文字,复选框才会有反应。
但我测试了一下,不论点复选框还是点文字,都会触发on_treeWidget_itemClicked事件。
且如果将on_treeWidget_itemClicked函数改为啥都不做(pass),点击复选框是有效的。
请问有没有碰到过这种问题

我是想无论点击复选框或者文字,复选框的状态都能改变,谢谢。

离线kamatyo

只看该作者 1楼 发表于: 2011-08-21
测了一下,发现是点击复选框时,其实是先更改了复选框的状态,然后再触发on_treeWidget_itemClicked事件的,所以每次点击复选框,其实他的状态更改了两次,所以没变。

似乎不好解决,能否在事件函数中区分是点击了复选框还是点击了文字呢?

离线kamatyo

只看该作者 2楼 发表于: 2011-08-21
解决了,用itemchanged事件。

想不通为何不单独弄一个itemChecked,非要itemchanged。
离线ppdayz

只看该作者 3楼 发表于: 2011-08-22
因为checkstate是item的一个部分,你也可以自己加一个的
快速回复
限100 字节
 
上一个 下一个