原文:http://johnsmith9th.iteye.com/blog/1178034
1. 写一个树型数据结构
2. 从QAbstractItemModel派生一个类,这个类包含或引用上述树形数据结构。
3. 至少实现 index, parent, data, rowCount和columnCount这5个纯虚函数。index和parent函数其实就是从树形数据结构转换出合适的QModelIndex回答给Qt的框架,QModelIndex含有一个指针,可以指向树形数据结构的节点。
4. 根节点,也就是树上看不见的那个节点,必须对应一个非法的QModelIndex,所以你的树形数据结构的根节点从来不会有一个QModelIndex的internalPointer指向它,也永远不要用createIndex来包含你的树形数据结构的根节点,记住,和你的树形数据结构的根节点对应的QModelIndex是一个非法的QModelIndex。
5.index函数的含义就是给你一个父QModelIndex,请你回答一下这个父亲的第row个孩子的QModelIndex,当然这个QModelIndex要指向正确的第row个孩子,这里的row是本级的概念,不是全局的概念,传入的row不会超过父ModelIndex的孩子个数。所以这个函数的签名应该改成GetChildModelIndexAccordingToParentModelIndexBySpecifiedRowAndColumn().当然这个签名有点长,所以没有被采纳。
6.parent函数的含义就是给你一个孩子的ModelIndex,请你回答出它的父亲的ModelIndex.当然,由于ModelIndex携带行列信息,所以,为了得知父亲ModelIndex的行值,往往需要得到祖父,然后判断父亲属于祖父的哪个孩子。这个函数必须保证第4条得以遵循。
7.rowCount回答某个父ModelIndex包含了多少个孩子。
8.data函数需要加以重视,简单的情况下你只需要关心DisplayRole,根据传入ModelIndex的列值,取出你的树形数据结构里的节点的文本返回则可;而对于你不懂或不关心的角色一定要返回QVaraint(),否则你会发现什么都显示不出来。
9.最后把你的树形结构构建好,让QAbstractItemModel的派生类能够引用到它,并且将该model的实例用QTreeView的setModel方法设入就好了。
分享到:
相关推荐
QTreeView树形视图使用自定义模型model,不是改造QT例子。
详细介绍QTreeView的使用, 包括:模型/视图,自定义委托、自定义样式等操作 以及无边框界面的拖拽等操作!
QT中模型视图控制框架中QTreeView的应用代码,好包括QTableView的应用和代理的应用
QTreeView 使用Expand展开指定位置节点
具体介绍见: Qt树形控件QTreeView使用1——节点的添加删除操作: http://blog.csdn.net/czyt1988/article/details/18996407 Qt树形控件QTreeView使用2——复选框的设置: ...利用C++11的function和bind功能,实现...
介绍了QTreeView的用法以及模型-视图的相关操作
自绘QTreeView,添加QPushbutton,并用样式设置按钮,进行美化
此例子通过自定义Treemodel和treeitem实现了Qtreeview的节点可以拖动到另一节点下,可以用来实现数据分组等操作。
QTreeView与QStandardItemModel的使用,编译环境Qt4,MinGW
QTreeView详解
QTreeview树结构完美可自由拖拽节点模型,可带数据项拖动,子节点可同时拖动,测试无BUG,可自行添加自定义委托项
自定义的QTreeView+Model实现树节点内部之间拖拽效果,同时实现通过点击按钮的方式向QTreeView中添加节点。
本资源是一个完整的QTreeView增删改的小工具项目,下载只需修改数据库的连接地址即可运行,使用的数据库是mdb数据库(access),可以很好的用来学习QTreeView节点的增删改功能。
QTreeView递归实现展开或者闭合某个节点下面的所有子节点 不是一键展开所有,是展开你要操作的节点下面的所有子节点!
详情请查看https://blog.csdn.net/liuguangzhou123/article/details/90580672