Qt MVC学习 模型子类化参考(三)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lengyuezuixue/article/details/82083048

       在某些层次模型中,查找给定的项的孩子的成本是很高的。懒加载能有效地保证模型的rowCount()方法只在必要的时候调用。在这种情况下,我们可以通过重新实现hasChildren()方法来为视图确认子项的存在和在QTreeView视图下给父项合适的修饰提供代价不高的方法。

      无论hasChildren()方法的重新实现的返回值是true还是false,都不会影响视图调用rowCount()方法来查询子项的个数。比如,在QTreeView视图中,如果父项没有展开(来显示子项),那么该视图就并不需要知道一共有多少子项。

      很多项都有子项,让hasChildren()任何时候都返回true有时是一个很有用方法。这可以保证每个项都可以尽可能晚地检查子项,从而使得初始化模型数据的项目时尽可能地快速。这样做唯一的缺点就是,直到用户试图查看一个并不存在的子项之前,没有子项的项目可能会错误地显示。

浏览和模型索引的创建

      层次模型需要提供方法,以便视图浏览它们所关联的树形结构以及获得项目的模型索引。

父项和子项

        由于与视图相关联的结构是由底层的数据结构决定的,每个子类化的模型类都有责任通过实现以下这些方法来创建它自己的模型索引。

        index():给定父项的索引模型。这个方法允许视图和委托访问该项的子项。如果找不到与参数中的行、列、父项相对应的项目,这个方法必须返回一个无效的模型索引:QModelIndex()。

        parent():提供一个任何给定的子项的父项的模型索引。如果这个方法是由模型中的顶级项目调用的,或者在模型中没有有效的父项,这个方法必须返回一个由空的QModelIndex()构造函数构造的无效的模型索引。

       上述的两个方法都会使用createIndex()工厂函数来创建供其他组件使用的索引。模型一般都会给这个方法提供独有的标识符来保证模型索引可以在以后与对应的项目重新关联。

拖拽动作的支持和MIME类型的处理

        模型/视图类支持拖拽操作,并且提供适用于很多应用的默认行为。但是,我们依然可以自定义在拖拽行为中项的编码方式。比如默认情况下项目是移动还是复制,以及如何插入到已存在的模型中。

猜你喜欢

转载自blog.csdn.net/lengyuezuixue/article/details/82083048
今日推荐