Как сделать так, чтобы при клике на частично проверенном узле QTreeView был снят флажок?

У меня есть QTreeView населенный QAbstractItemModel подкласс, позволяющий конечным узлам проверяться пользователем. Если проверено правильное подмножество листовых узлов-потомков неконечного узла, то этот узел проверяется частично (Qt::CheckStateRole является Qt::PartiallyChecked).

В настоящее время, если пользователь нажимает на частично проверенный узел, состояние проверки изменяется на Qt::Checked; Я хочу вместо этого очистить узел (Qt::Unchecked). Есть ли способ настроить это поведение? Чтобы контролировать это с QCheckBox Я бы переопределил QAbstractButton::nextCheckState(), но я не могу найти ничего похожего для QTreeView,

1 ответ

Реализуйте желаемое поведение в вашей модели setData

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

For Qt::CheckStateRole

Так что когда вы получите в значении Qt::PartiallyChecked. Вы пересекаете дочерние элементы, чтобы установить Qt::Unchecked, а также изменяете текущий элемент.

Другие вопросы по тегам