也许我只是想到这一切都错了,但我觉得奇怪的是在Qt中有一个工作树模型,需要将数据包装在一个项目类中。
在我能够找到的所有示例中,为QTreeView制作的每个模型都需要实现自定义Node或TreeItem类(通常是类型(对象))。出于多种原因,这让我感到奇怪:
a)该模型能够直接提取数据的重点是什么? Node或TreeItem类似乎是额外的包袱。
b)即使树视图需要特殊的项/节点类,为什么该类不是某种QObject?我见过的大多数Node实现都有一组get / set父/子方法和属性;但似乎使用QObject已经内置了所有,所以为什么不使用它呢?
我的直觉(可能是错误的)告诉我,如果我们发现我们需要额外的Node类来实现树模型,那是因为Qt框架设计中存在差距......或者是对它的误解
我隐约知道QStandardItem和QStandardItemModel,但发现自己问为什么他们是QtGui的一部分,而不是QtCore,正如其他模型& modelItems是。用QtGui对这些类进行分组就像是视图和视频。模特正在混合在一起。也就是说,我也不明白为什么这些都在QtGui中,因为它们不从任何QtGui类继承(它们来自QtCore类)。
如果有人可以证明这个设计的合理性,请解释我是如何误解它的,(或者只是与我的挫折感有关),我很乐意听到它!
谢谢!
答案 0 :(得分:0)
多年来已经实施了多个基于QAbstractItemModel
的数据模型(几十年?),我理解你的挫败感,但是...
在Qt中有一个工作树模型,需要将数据包装在一个项目类中。
完全没有。简单地说,在很多情况下,将模型行封装在自己的类中是有意义的 - 每列代表项的不同属性(例如,考虑如何实现QFileSystemModel
)。 / p>
a)不是模型能够直接提取数据的全部意义吗? Node或TreeItem类似乎是额外的包袱。
你可以使用QAbstractItemModel::data
和QAbstractItemModel::setData
b)即使树视图需要特殊的项/节点类,为什么该类不是某种QObject?我见过的大多数Node实现都有一组get / set父/子方法和属性;但似乎使用QObject已经内置了所有,所以为什么不使用它呢?
QObject
是一件相当重要的事情。鉴于模型可以有(数十?)数千行,每行可以有相当多的列,不难看出强制每个“单元”继承QObject
可能无法很好地扩展。
我隐约知道QStandardItem和QStandardItemModel,但发现自己问为什么他们是QtGui的一部分,而不是QtCore,正如其他模型& modelItems是。
QStandardItem
使用 - 因此依赖于 - 几个QtGui类型,例如QIcon
和QBrush
,因此它必须是QtGui的一部分。
所以,正如我所说,我理解你的挫败感,但是,为了保持相当通用的Qt代码,它实际上非常实用。