两个不同的 QTreeView 和一个共享的 QStandardItemModel
Posted
技术标签:
【中文标题】两个不同的 QTreeView 和一个共享的 QStandardItemModel【英文标题】:Two different QTreeViews with one shared QStandardItemModel 【发布时间】:2020-10-16 00:18:15 【问题描述】:我有一个简单的任务,但正在努力寻找正确的实施方式:
我希望一个共享的 QStandardItemModel 包含一个树结构,以显示在两个不同的 QTreeView 中。 第一个 QTreeView 按原样显示模型,并允许用户添加、删除和重新排列项目。单击一个项目会在 QTreeView 下方的 QStackedWidget 中显示一个与项目相关的 QWidget。某些项目类型也可以重命名。 第二个 QTreeView 显示相同的树模型,但默认情况下所有项目都显示为灰色。然后处理器将沿着树结构移动并处理每个项目。每当处理一个项目时,它不应再显示为灰色。那些没有变灰的项目应该是可点击的,以在查看器中显示项目对应的处理图像。每当在第一个 QTreeView 中进行更改时,处理器就会再次从更改的位置开始处理。如何实现两个 QTreeView 的不同外观和功能?我是否将自定义 QItemDelegates 分配给每个 QTreeView?我应该为第二个 QTreeView 使用 QIdentityProxyModel 吗?
【问题讨论】:
【参考方案1】:只需对两个模型使用 QStandardItemModel,因为它们存储相同的信息,因此如果您希望它们看起来不同,则必须使用委托。
如果您想要在单击视图时执行一些操作,那么这不依赖于模型,但您必须使用独立于其他视图的视图单击信号。
对于第二个视图,如果需要委托更改颜色,逻辑是使用角色来指示该项目是否已被处理,然后根据该角色更改颜色。当您说“第一个 QTreeView 发生变化”时,实际上应该说“模型发生变化”,因此只需使用 dataChanged 信号,通过在处理前后更改角色状态来处理项目。
【讨论】:
以上是关于两个不同的 QTreeView 和一个共享的 QStandardItemModel的主要内容,如果未能解决你的问题,请参考以下文章