我有一个JSON模型,我填充它QTreeView:
*-group1
| |
| *-item1 value1
| |
| *-item2 value2
|
*-group2
|
*-item4 value3
Run Code Online (Sandbox Code Playgroud)
现在我想禁用选择groups,以便用户只能选择行items.我想在不修改模型的情况下实现它.
使用代理模型,例如QIdentityProxyModel并重新实现QAbstractItemModel::flags(),删除组项的Qt::ItemIsSelectable标志:
\n\nQt::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}\nRun Code Online (Sandbox Code Playgroud)\n\n然后将原始(未修改的)模型设置为该代理模型的源模型,并将代理模型实例设置为树视图\xe2\x80\x99s模型:
\n\nDisableGroupProxyModel* proxy = new DisableGroupProxyModel(this);\nproxy->setSourceModel(originalModel);\ntreeView->setModel(proxy);\nRun Code Online (Sandbox Code Playgroud)\n