Qt官方demo日拱一卒- simple tree model

本文详细介绍了如何在Qt中自定义TreeModel,通过分析TreeItem和TreeModel类的实现,展示如何组织数据并实现树形显示。内容包括构造函数、类分析、代码解析和应用场景,适合进阶学习。
摘要由CSDN通过智能技术生成

Simple Tree Model

此介绍如何自定义TreeModel。一点都不Simple,值得多看几遍。

前置实例

运行结果

在这里插入图片描述

  1. 能够树形显示文件中的内容

实例位置

Qt_Offical_demo/widgets/itemviews/simpletreemodel

主要使用类

  • QTreeView
  • QAbstractItemModel
  • QModelIndex
  • QFile
  • QVariant

类分析

本例代码我们从类与类的关系开始分析。

聚合
TreeModel
TreeItem

使用面向对象的方法,我们先来看类TreeItem.

Class TreeItem

TreeItem是用来描述Model中的一个Item的。

treeitem.h

因为Tree的特殊性,我们来看一下头文件:

class TreeItem
{
   
public:
	// ClassInfo 1 
    explicit TreeItem(const QList<QVariant> &data, TreeItem *parentItem = 0);
    ~TreeItem();

    void appendChild(TreeItem *child);

    TreeItem *child(int row);
    int childCount() const;
    int columnCount() const;
    QVariant data(int column) const;
    int row() const;
    TreeItem *parentItem();

private:
	//ClassInfo 2
    QList<TreeItem*> m_childItems;
    QList<QVariant> m_itemData;
    TreeItem *m_parentItem;
};
ClassInfo 1:构造函数

需要使用一个QList,里面存储的内容的类型是QVariant,即为某种类型都可以。

ClassInfo2 :私有成员

私有成员代表了类的属性,通常是需要注意的。

treeitem.cpp

下面看一下CPP文件,注意一些细节。

构造函数:

TreeItem::TreeItem(const QList<QVariant> &data, TreeItem *parent)
{
   
    m_parentItem = parent;
    m_itemData = data;
}

没什么可说的。

析构函数:

TreeItem::~TreeItem()
{
   
    qDeleteAll(m_childItems);
}

这里的m_childItems是一个QList,里面存储的指针。qDeleteAll()可以删除容器里面的item,前提是item的类型是一个指针。

延申:本类有三个成员:

    QList<TreeItem*> m_childItems;
    QList<QVariant> m_itemData;
    TreeItem *m_parentItem;

为什么只需要delete一个呢?
m_itemData直接就是类对象,是在栈上创建的,本来就没有new,更不要说delete了。
m_parentItem虽然是一个类指针,但是并不是本类创建的,而是由构造函数传入的,因此不用delete。
总结:由你new的,才需要你去delete。

其他函数:

void TreeItem::appendChild(TreeItem *item)
{
   
    m_childItems.append(item);
}
TreeItem *TreeItem::child(int row)
{
   
    return m_childItems.value(row);
}
int TreeItem::childCount() 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值