【问题标题】:Two different QTreeViews with one shared QStandardItemModel两个不同的 QTreeView 和一个共享的 QStandardItemModel
【发布时间】:2020-10-16 00:18:15
【问题描述】:

我有一个简单的任务,但正在努力寻找正确的实施方式:

  • 我希望一个共享的 QStandardItemModel 包含一个树结构,以显示在两个不同的 QTreeView 中。
  • 第一个 QTreeView 按原样显示模型,并允许用户添加、删除和重新排列项目。单击一个项目会在 QTreeView 下方的 QStackedWidget 中显示一个与项目相关的 QWidget。某些项目类型也可以重命名。
  • 第二个 QTreeView 显示相同的树模型,但默认情况下所有项目都显示为灰色。然后处理器将沿着树结构移动并处理每个项目。每当处理一个项目时,它不应再显示为灰色。那些没有变灰的项目应该是可点击的,以在查看器中显示项目对应的处理图像。每当在第一个 QTreeView 中进行更改时,处理器就会再次从更改的位置开始处理。

如何实现两个 QTreeView 的不同外观和功能?我是否将自定义 QItemDelegates 分配给每个 QTreeView?我应该为第二个 QTreeView 使用 QIdentityProxyModel 吗?

【问题讨论】:

    标签: python pyqt pyqt5 qtreeview qstandarditemmodel


    【解决方案1】:

    只需对两个模型使用 QStandardItemModel,因为它们存储相同的信息,因此如果您希望它们看起来不同,则必须使用委托。

    如果您想要在单击视图时执行一些操作,那么这不依赖于模型,但您必须使用独立于其他视图的视图单击信号。

    对于第二个视图,如果需要委托更改颜色,逻辑是使用角色来指示该项目是否已被处理,然后根据该角色更改颜色。当您说“第一个 QTreeView 发生变化”时,实际上应该说“模型发生变化”,因此只需使用 dataChanged 信号,通过在处理前后更改角色状态来处理项目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-01
      • 2011-01-10
      相关资源
      最近更新 更多