信号一个QTreeWidgetItem 切换复选框。

4
如何检查复选框在QTreeWidget中是否被选中或取消选中?展示了如何获取QTreeWidget项目上复选框的状态。使用这种方法,通过树形结构中的itemClicked信号,我可以查询所选项目是否被选中。然而,我需要跟踪此项目,以确定它先前是否被选中过。

有没有一种方法可以知道QTreeWidgetItem是否具有切换复选框,而无需为其创建子类,即使该项目可能处于不同级别的父项目中?

顺便说一句,QT为什么没有将toggled方法附加到QTreeWidgetItem上?

1个回答

5
itemClicked信号不是处理treewidget复选框的好选择。
一方面,当不点击项目的复选框部分时,它会产生误报;另一方面,使用键盘切换复选框时,它会产生误报否定值。
我认为,在现有信号中最好的选择是使用itemChanged。这将注册用鼠标和键盘进行的所有复选框状态更改。但这并不是完美的通用解决方案,因为每当更改任何其他项目数据时(例如文本、字体、背景颜色等),它都会产生误报。因此,您需要block itemChanged信号,无论何时进行其他类型的更改。

1
你有没有想过为什么QTreeWidget没有实现toggled功能? - user-2147482637
1
@user1938107。我认为这是因为QTreeWidget是一个方便的类,因此可能有很多人可能合法地想要的功能,但永远不会被添加。在这种特殊情况下,我认为在发送“itemChanged”信号时未包含数据角色是一个错误。不过,您始终可以通过子类化QTreeWidgetItem(或QTreeView)轻松解决这些问题。 - ekhumoro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接