使用不同的视图以不同的方式显示相同的模型数据

时间:2016-10-28 21:03:16

标签: python qt pyqt

假设我有一些看起来像这样的数据

[
    {'name': 'one', 'dir': '/path/to/foo'},
    {'name': 'two', 'dir': '/path/to/bar'},
]

我想以两种方式显示这些数据 - 平面和嵌套(最好使用QTreeViews):

flat tree

嵌套

nested_tree

理想情况下,我想使用相同的模型,因此它们都使用相同的数据,我不必担心让它们与另一个保持同步。

问题是在模型/视图系统中,heirarchy似乎是模型应该控制的东西,而不是视图。在这种情况下,我将如何使用模型/视图框架。

我是否应该重写模型以根据“视图类型”返回不同的内容。我是否应该重写视图以对模型中的“派生”项目进行自定义绘制?是否有某种“非中间模型”可用于将真实模型中的数据转换为每个视图可以显示的内容?

1 个答案:

答案 0 :(得分:0)

应该可以使用代理模型转换结构,KItemModels框架有一些关于如何做到这一点的示例。

但是,通过让不同的模型对相同的数据进行操作,也可以实现显示相同的基础数据。

即。模型只是数据的接口,它不需要拥有或包含数据。

因此,您可以实现一个可以通知更改的数据容器类,然后构建两个使用相同容器对象的模型,以您需要的方式显示数据。