QTreeView禁用某些行的选择

Jek*_*eka 5 c++ qt qt5

我有一个JSON模型,我填充它QTreeView:

*-group1
| |  
| *-item1     value1
| |
| *-item2     value2
|
*-group2
  |
  *-item4     value3
Run Code Online (Sandbox Code Playgroud)

现在我想禁用选择groups,以便用户只能选择行items.我想在不修改模型的情况下实现它.

Fra*_*eld 3

使用代理模型,例如QIdentityProxyModel并重新实现QAbstractItemModel::flags(),删除组项的Qt::ItemIsSelectable标志:

\n\n
Qt::ItemFlags DisableGroupProxyModel::flags(const QModelIndex& index) const {\n   const auto flags = QIdentityProxyModel::flags(index);\n   if (index is group) {\n       return flags & ~Qt::ItemIsSelectable;\n   }\n\n   return flags;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后将原始(未修改的)模型设置为该代理模型的源模型,并将代理模型实例设置为树视图\xe2\x80\x99s模型:

\n\n
DisableGroupProxyModel* proxy = new DisableGroupProxyModel(this);\nproxy->setSourceModel(originalModel);\ntreeView->setModel(proxy);\n
Run Code Online (Sandbox Code Playgroud)\n