我目前正在构建模型视图架构并遇到了一个我无法通过互联网查找信息的问题。
我有一组复杂的数据,我希望以两种(或更多种)不同的方式向用户展示:
这些数据的打印方式对我来说无关紧要,但如果这有助于它在表格视图(基本信息)或列视图(完整信息)中。这两个条款来自QT模型/视图框架。
现在我虽然有两个选项来实现这个并且想知道我应该使用的那个
选项1
选项2
老实说,我会选择2,但是看到互联网上使用选项1的案例数量,我开始怀疑我是否正确行事。 (当模型的多个视图看起来非常频繁时,我从未找到任何数据双模型的例子)
在视图类中放置数据相关处理对我来说似乎是错误的,但复制数据模型会导致重复数据(这看似错误)或共享数据(然后模型不再“保持'数据)
我也看过QT代表,但这些类主要是为了改变数据的外观。我没有找到一种方法来使用代理来忽略与一个视图无关的数据。
答案 0 :(得分:0)
您完全正确地认为使用视图过滤数据是错误的。重新实现视图的唯一原因是具有相同数据的不同视图或用户事件的特殊处理。
因此,有两种方法可以过滤掉数据:
1.创建两个共享数据的模型。这是一种标准的recommended方法 - 不是将数据保存在模型中。
2.创建一个提供所有数据的模型,并创建一个继承自QSortFilterProxyModel
的代理模型来过滤掉数据。
您需要重新实施filterAcceptsColumn
方法以过滤列,并filterAcceptsRow
过滤掉行。
然后使用View-Model
显示所有数据,或View-Proxy-Model
显示一些数据。