如何单击QTreeView部分检查的节点取消选中该节点?

时间:2013-01-17 15:09:58

标签: qt checkbox treeview tri-state-logic

我有一个由QTreeView子类填充的QAbstractItemModel,允许用户检查叶子节点。如果检查非叶节点的后代叶节点的适当子集,则部分检查该节点(Qt::CheckStateRoleQt::PartiallyChecked)。

目前,如果用户点击部分检查的节点,则检查状态将更改为Qt::Checked;我希望它清除节点(Qt::Unchecked)。有没有办法自定义此行为?要使用QCheckBox来控制此项,我会覆盖QAbstractButton::nextCheckState(),但我找不到与QTreeView类似的任何内容。

1 个答案:

答案 0 :(得分:1)

在模型setData中实现所需的行为

bool QAbstractItemModel::setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole )

For Qt::CheckStateRole

所以当你收到Qt :: PartiallyChecked的价值时。您遍历项目子项以设置为Qt :: Unchecked,并且还更改当前项目。