首页 > 其他分享 >Qt 实战(10)模型视图 | 10.3、模型数据索引

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

时间:2024-09-14 09:52:52浏览次数:3  
标签:数据项 10 获取 index 模型 视图 索引 QModelIndex

文章目录


前言:

在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,获取,index,模型,视图,索引,QModelIndex
From: https://blog.csdn.net/cloud323/article/details/142215936

相关文章

  • P10469 后缀数组(Hash+二分)
    #include<bits/stdc++.h>usingnamespacestd;#definexfirst#defineysecondtypedefpair<int,int>PII;typedeflonglongll;typedefunsignedlonglongull;typedefunsignedintuint;typedefvector<string>VS;typedefvector<int>......
  • 目标检测与比对,使用yolov5s跑数据集构建模型
    1.1数据集下载我使用的是下面的数据集,有需要可去以下链接下载trianA数据集下载链接:https://pan.baidu.com/s/1zj3MqZEHKHpFACs95Ov4gQ?pwd=ma1ptrianB数据集下载链接:https://pan.baidu.com/s/1whg_-jLfbUnfpZkKjvdziQ?pwd=yg54 1.2yolov5s下载(1)官网......
  • Luogu P10179 水影若深蓝 题解 [ 绿 ] [ 并查集 ] [ 构造 ]
    水影若深蓝:挺好的一道并查集构造题。观察不难发现“距离为\(2\)”这个条件我们可以通过黑白染色实现,我们把他们的中转点染成与他们相反的颜色,把这两个距离为\(2\)的点染成相同颜色。这个染色问题就很并查集。于是我们用并查集维护相同的种类。显然,当图上只有一个连通块的......
  • 开源视觉大模型
    MiniCPM-V2.6https://github.com/OpenBMB/MiniCPM-VMiniCPM-Visaseriesofend-sidemultimodalLLMs(MLLMs)designedforvision-languageunderstanding.Themodelstakeimage,videoandtextasinputsandprovidehigh-qualitytextoutputs.SinceFebruary......
  • 论文阅读笔记 --- 图模互补:知识图谱与大模型融合综述 --- 按参考文献整理
    论文阅读笔记---图模互补:知识图谱与大模型融合综述---按参考文献整理关于首次发表日期:2024-09-13论文原文链接:http://xblx.whu.edu.cn/zh/article/doi/10.14188/j.1671-8836.2024.0040/将文章中的参考文献整理一下,基本保持原文的目录结构引言、相关介绍KnowledgeGra......
  • 微信小程序开发系列10----页面配置--事件冒泡和阻止
       下图点击里面,外面的事件也触发  场景:广告点击先看广告,之后跳转到功能页面 会冒泡的事件源码获取方式(免费):(1)登录-注册:http://resources.kittytiger.cn/(2)签到获取积分(3)搜索:8-wxmleventMp事件冒泡和阻止......
  • 大模型API的响应内容(markdown语法)在Html中显示实例
    获取大模型API的响应内容的函数返回returnresponse.choices[0].messagefromzhipuaiimportZhipuAIdefget_response_from_model(question):client=ZhipuAI(api_key='your_api_key')response=client.chat.completions.create(model='glm-4-plus&......
  • 【Canvas与密铺】90年代马赛克密铺效果 1920x1080
    【成图】【代码】<!DOCTYPEhtml><htmllang="utf-8"><metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/><head><title>20世纪90年代马赛克瓷砖效果1920x1080</title><styl......
  • P10468 兔子与兔子(Hash)
    #include<bits/stdc++.h>usingnamespacestd;#definexfirst#defineysecondtypedefpair<int,int>PII;typedeflonglongll;typedefunsignedlonglongull;typedefunsignedintuint;typedefvector<string>VS;typedefvector<int>......
  • 【安全运营】揭秘100个网络风险解决秘籍,让你安全畅游网络世界,不再怕风险!
    01账号密码安全(14条)如果有初始密码,应尽快修改;密码长度不少于8个字符;不要使用单一的字符类型,例如只用小写字母或只用数字;用户名与密码不要使用相同字符;常见的弱口令尽量避免设置为密码;自己、家人、朋友、亲戚、宠物的名字避免设置为密码;生日、结婚纪念日、电话号码等个人信......