Qt 实战(10)模型视图 | 10.3、模型数据索引


前言:

在Qt框架中,模型/视图(Model/View)架构是一种强大的机制,它允许开发者将数据的存储(Model)与数据的展示(View)分离。这种架构不仅提高了代码的可维护性,还增强了应用程序的灵活性。在模型/视图架构中,模型数据索引(Model Data Index)是一个核心概念,它用于在不依赖底层数据结构的情况下,高效地访问和操作数据

一、模型数据索引

1、什么是模型数据索引?

模型数据索引,在Qt中通常通过QModelIndex类表示,是访问模型中数据项的一种方式。每个QModelIndex对象都包含了对特定数据项的临时引用,这个引用包含了行号、列号以及父项的索引信息。通过这种方式,视图(View)和委托(Delegate)能够请求并显示模型(Model)中的数据,而无需关心数据在底层的具体存储方式。

2、模型

在模型视图结构中,模型提供了一个标准接口,代理与视图可以通过标准接口访问模型数据。标准接口是由QAbstractItemModel定义的,无论数据项存储在任何底层数据结构中,都可以通过标准接口访问数据项。Qt中常见的3种模型,如下:

在这里插入图片描述

3、获取QModelndex

根据 行号列号父项的QModelndex 可以获取数据项对应的QModelndex,进而对数据进行操作,方法如下:

 QModelIndex QAbstractItemModel::index(int row, int column, const QModelIndex &parent = QModelIndex()) const

3.1、获取列表数据项索引

对于列表,只需要知道行号就可以获取索引,如下:

QModelIndex idx = model->index(0, 0);//列号传入0即可

在这里插入图片描述

3.2、获取表格数据项索引

表格可以理解成一个二维的数组,根据行、列号可以获取对应的索引,如下:

QModelIndex idx = model->index(1, 2);//获取第2行第3列的数据,索引号都从0开始

在这里插入图片描述

3.3、获取树数据项索引

树是在表格的基础上加上了层级结构,所以需要传入父节点的QModelIndex才可以获取索引,如下:

// 如果是顶层节点传入空的父节点索引即可
QModelIndex indexA = model->index(0, 0, QModelIndex());    // A 索引
QModelIndex indexC = model->index(2, 1, QModelIndex());    // C 索引
QModelIndex indexB = model->index(1, 0, indexA);           // B 索引

在这里插入图片描述

4、模型数据更新

通过索引可以获取、编辑模型中的数据,接口如下:

// 获取模型数据
virtual QVariant QAbstractItemModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const = 0

// 修改模型数据
virtual bool QAbstractItemModel::setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值