我有一个JSON
模型,我用QTreeView
填充它:
*-group1
| |
| *-item1 value1
| |
| *-item2 value2
|
*-group2
|
*-item4 value3
现在我想禁用groups
的选择,以便用户只能选择items
行。我想在不修改模型的情况下实现它。
答案 0 :(得分:1)
可以使用QItemSelectionModel
完成此操作。你可以用
treeView->selectionModel();
然后连接到模型的信号
void currentRowChanged(const QModelIndex ¤t, const QModelIndex &previous)
并在连接的插槽内检查新索引是否为group,如果group只选择previous
model index。
答案 1 :(得分:1)
使用代理模型,例如QIdentityProxyModel并重新实现QAbstractItemModel::flags(),删除组项的Qt::ItemIsSelectable标记:
Qt::ItemFlags DisableGroupProxyModel::flags(const QModelIndex& index) const {
const auto flags = QIdentityProxyModel::flags(index);
if (index is group) {
return flags & ~Qt::ItemIsSelectable;
}
return flags;
}
然后将原始(未修改)模型设置为此代理模型的源模型,将代理模型实例设置为树视图的模型:
DisableGroupProxyModel* proxy = new DisableGroupProxyModel(this);
proxy->setSourceModel(originalModel);
treeView->setModel(proxy);