QT,[demo]EditableTreeModel中,TreeItem和TreeModel的理解

原创 2018年04月17日 11:39:47

TreeModel和QStringListModel、QSqlTableModel等不同,后者是维护一个model实例,数据(可理解为)直接初始化到model中,而demo中的TreeModel是创建并维护一个树结构TreeItem的实例,在TreeModel::setModelData中对结点进行parent->insertChildren操作。

demo中的TreeItem是树结构,每一个结点中存储的数据,与View及Model中设计的item的结构相符,但并不是类似QTableWidget中的一个QTableWidgetItem对象。

===========================================

TreeModel::setModelData执行完,便初始化完成了一个以rootItem为根结点的树结构。(图中忽略Column #1)


===========================================

TreeModel中,在实现index(r,c,parent)时,先将rootItem与QModelIndex()关联,再利用桥接关系parentItem = getItem(r,c,parent),childItem = parentItem->child(r),建立index与结点之间的内联index = createIndex(r,c,childItem)。之后,其他成员便可直接调用getItem(r,c,index),通过QModelIndex::internalPointer获得index内联的childItem。


QModelIndex TreeModel::index(int row, int column, const QModelIndex &parent) const
{
    if (parent.isValid() && parent.column() != 0)
        return QModelIndex();
//! [5]
//! [6]
    TreeItem *parentItem = getItem(parent);
    TreeItem *childItem = parentItem->child(row);
    if (childItem)
        return createIndex(row, column, childItem);
    else
        return QModelIndex();
}

TreeItem *TreeModel::getItem(const QModelIndex &index) const
{
    if (index.isValid()) {
        TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
        if (item)
            return item;
    }
    return rootItem;
}


===========================================

demo截图


QT Tree model

Qt 的确是一个好东西,开发起来非常方便,但是方便也带来很多问题,这些问题就不多说了,用到的人自然会有体会。 这几天在研究Qt的MVC,List和Table类型的都很简单,没有什么难度,但是它的...
  • markely
  • markely
  • 2014-08-27 18:10:35
  • 1583

Qt:在TreeModel+QTreeView中使用复选框(checkbox)

需要实现一个功能:在QT的TreeView中,能够使用复选框,并且选中父节点的复选框可以全选或取消子节点的复选框。这里就以QT附带的simpletreemodel项目为例,说明一下其用法。simple...
  • wcknxx
  • wcknxx
  • 2016-02-22 10:00:38
  • 1416

Qt 自定义treemodel

要实现一个treemodel,必须得从QAbstractItemModel派生,并且还必须有拥有一个树结构的数据。对于树形的treemodel,他的每一个我们所看到的第一层index都有一个共同的根节...
  • sydnash
  • sydnash
  • 2012-01-10 19:18:59
  • 4383

QT Tree model

Qt 的确是一个好东西,开发起来非常方便,但是方便也带来很多问题,这些问题就不多说了,用到的人自然会有体会。这几天在研究Qt的MVC,List和Table类型的都很简单,没有什么难度,但是它的Tree...
  • zhu_nn
  • zhu_nn
  • 2010-05-20 16:10:00
  • 3778

Qt 的 TreeModel

Qt 的确是一个好东西,开发起来非常方便,但是方便也带来很多问题,这些问题就不多说了,用到的人自然会有体会。这几天在研究Qt的MVC,List和Table类型的都很简单,没有什么难度,但是它的Tree...
  • joliny
  • joliny
  • 2008-11-15 19:52:00
  • 854

Qt:TreeModel+QTreeView中使用图标

原文地址:
  • han99yi
  • han99yi
  • 2014-06-18 17:18:36
  • 1251

Qt QTreeView 加 自定义Model实现自定义树形控件

Qt很好很强大,我很喜欢研究完hello Qt后,开始自己开发一个小东西,Tree控件,首先是Node类:node.h #ifndef NODE_H#define NODE_Hclass Node{p...
  • firefly_liu
  • firefly_liu
  • 2009-01-16 11:51:00
  • 6004

SWT_Tree的使用.

创建一个简单的Tree: Tree tree = new Tree(this, SWT.BORDER|SWT.MULTI|SWT.CHECK); TreeItem item = new TreeIt...
  • lyq19870515
  • lyq19870515
  • 2013-12-23 15:07:38
  • 3106

QT中的View Model模型系列一

本讲主要介绍一下QT中ViewModel的基本结构,以及简单的使用方法。对于View Model的概念这里就不累述了,简单的了解可以参考: http://en.wikipedia.org/wik...
  • markely
  • markely
  • 2012-08-27 20:40:46
  • 4825

【ExtJS】Model继承体系中半路切换为TreeModel

如果model中已有自己的继承体系,那么根只能在Model或者TreeModel选一个。 继承树中半路要转TreeModel,怎么办? 幸好TreeModel对父类Model的变更不大,直接抄源码下来...
  • redvalley
  • redvalley
  • 2015-01-09 10:49:27
  • 1944
收藏助手
不良信息举报
您举报文章:QT,[demo]EditableTreeModel中,TreeItem和TreeModel的理解
举报原因:
原因补充:

(最多只允许输入30个字)