当前位置: 首页 > article >正文

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

文章目录

  • 一、模型数据索引
    • 1、什么是模型数据索引?
    • 2、模型
    • 3、获取`QModelndex`
      • 3.1、获取列表数据项索引
      • 3.2、获取表格数据项索引
      • 3.3、获取树数据项索引
    • 4、模型数据更新

前言:

在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)

http://www.kler.cn/news/304834.html

相关文章:

  • 【网络安全】漏洞挖掘:文件上传实现Webshell
  • Qt+FFmpeg开发视频播放器笔记(三):音视频流解析封装
  • 如何制作一个自己的外卖会员卡小程序?
  • 【AutoX.js】选择器 UiSelector - 查找包名
  • 基于Kubernetes部署Spark:spark on kubernetes
  • yaml配置文件(SpringBoot学习4)
  • Qt 实现自定义截图工具
  • 【Android】【Bug】Activity全屏(保留底部按钮)被打断变成非全屏了
  • 基于SpringBoot的扶贫助农管理系统
  • IDEA中集成Git及Github
  • nordic芯片 flash加密 防止被抄板
  • 安卓14剖析SystemUI的ShadeLogger/LogBuffer日志动态控制输出dumpsy机制
  • JSP经典设计模式流程分析:JSP+JavaBean设计模式+MVC设计模式
  • 串口接收不到数据之电阻虚焊bug分析思路
  • springboot和springcloud区别
  • 解锁定位服务:Flutter应用中的高德地图定位
  • Oracle(126)如何使用闪回表(Flashback Table)?
  • mac电脑打不开rar文件怎么办 rar文件怎么转换成zip并打开
  • 【主机入侵检测】Wazuh规则详解
  • 自定义EPICS在LabVIEW中的测试
  • [实践应用] 深度学习之损失函数
  • 远超想象的复杂
  • InternVL2- dockerfile环境变量持久化使用`ENV`而不是`RUN export`来设置环境变量,以确保环境变量在容器运行时仍然可用
  • python画图|3D参数化图形输出
  • MySQL 事务的 ACID 特性与应用
  • 分布式事务学习笔记(二)Seata架构、TC服务器部署、微服务集成Seata
  • Facebook的虚拟现实计划:未来社交的全新视角
  • 使用 LangChain 和 Neo4j 构建智能图数据库查询系统
  • SQL注入(数据库)简介
  • 【CVPR2024】Scaling Up Video Summarization Pretraining with Large Language Models