我有一个由QTreeView
子类填充的QAbstractItemModel
,允许用户检查叶子节点。如果检查非叶节点的后代叶节点的适当子集,则部分检查该节点(Qt::CheckStateRole
是Qt::PartiallyChecked
)。
目前,如果用户点击部分检查的节点,则检查状态将更改为Qt::Checked
;我希望它清除节点(Qt::Unchecked
)。有没有办法自定义此行为?要使用QCheckBox
来控制此项,我会覆盖QAbstractButton::nextCheckState()
,但我找不到与QTreeView
类似的任何内容。
答案 0 :(得分:1)
在模型setData中实现所需的行为
bool QAbstractItemModel::setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole )
For Qt::CheckStateRole
所以当你收到Qt :: PartiallyChecked的价值时。您遍历项目子项以设置为Qt :: Unchecked,并且还更改当前项目。