也许我只是想错了,但我觉得奇怪的是,要在Qt中建立一个工作树模型,需要将数据包装在item类中。
在我能够找到的所有示例中,为QTreeView创建的每个模型都需要自定义Node或TreeItem类(通常为(Object)类型)的实现。我觉得这很奇怪,原因有几个:
( a)难道模型不能直接提取数据的全部要点吗?Node或TreeItem类似乎是额外的包袱。
b)即使树视图需要一个特殊的项/节点类,为什么这个类不是某种QObject呢?我看到的大多数Node实现都有一个get/set父/子方法和属性的集合;但是似乎使用QObject时已经内置了这些,那么为什么不使用它呢?
我的直觉(这可能是错误的)告诉我,如果我们发现我们需要一个额外的节点类来实现一个树模型,那是因为Qt框架设计中的一个空白。或是对它的误解。
我模糊地意识到了QStandardItem和QStandardItemModel,但是我发现我自己在问为什么它们是QtGui的一部分,而不是QtCore,就像其他的模型& modelItems一样。用QtGui对这些类进行分组感觉就像视图和模型正在混合在一起。尽管如此,我也不明白为什么这些类在QtGui中,因为它们不继承任何QtGui类(它们来自QtCore类)。
如果有人能证明这个设计是合理的,解释我是如何误解它的(或只是与我的沮丧有关),我很想听听它!
谢谢!
发布于 2016-10-04 18:54:46
多年来(几十年)实现了许多基于QAbstractItemModel的数据模型?我理解你的沮丧,然而..。
要在Qt中建立工作树模型,需要将数据包装在item类中。
不用谢。简单地说,在很多情况下,将模型行封装到自己的类中是有意义的--每一列表示项的不同属性(例如,考虑如何实现QFileSystemModel )。
( 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代码,它实际上是非常有用的。
https://stackoverflow.com/questions/39857974
复制相似问题