如何正确实现相同数据集的不同视图选项

时间:2014-08-28 15:42:50

标签: qt mvvm

我目前正在构建模型视图架构并遇到了一个我无法通过互联网查找信息的问题。

我有一组复杂的数据,我希望以两种(或更多种)不同的方式向用户展示:

  • 显示完整数据
  • 仅显示
  • 中选定的(部分)信息

这些数据的打印方式对我来说无关紧要,但如果这有助于它在表格视图(基本信息)或列视图(完整信息)中。这两个条款来自QT模型/视图框架。

现在我虽然有两个选项来实现这个并且想知道我应该使用的那个

选项1

  • 我构建了我的数据结构
  • 将其包含在自定义模型中
  • 专门(子类)视图类,以便只打印我感兴趣的内容。

选项2

  • 我构建了我的数据结构
  • 将我的模型专门化以仅提供对相关数据的访问
  • 使用标准视图将其打印在屏幕上。

老实说,我会选择2,但是看到互联网上使用选项1的案例数量,我开始怀疑我是否正确行事。 (当模型的多个视图看起来非常频繁时,我从未找到任何数据双模型的例子)

在视图类中放置数据相关处理对我来说似乎是错误的,但复制数据模型会导致重复数据(这看似错误)或共享数据(然后模型不再“保持'数据)

我也看过QT代表,但这些类主要是为了改变数据的外观。我没有找到一种方法来使用代理来忽略与一个视图无关的数据。

1 个答案:

答案 0 :(得分:0)

您完全正确地认为使用视图过滤数据是错误的。重新实现视图的唯一原因是具有相同数据的不同视图或用户事件的特殊处理。

因此,有两种方法可以过滤掉数据:

1.创建两个共享数据的模型。这是一种标准的recommended方法 - 不是将数据保存在模型中。

2.创建一个提供所有数据的模型,并创建一个继承自QSortFilterProxyModel的代理模型来过滤掉数据。

您需要重新实施filterAcceptsColumn方法以过滤列,并filterAcceptsRow过滤掉行。

然后使用View-Model显示所有数据,或View-Proxy-Model显示一些数据。