Qt模型视图代理之MVD(模型-视图-代理)概念的简单介绍

往期回顾

Qt绘图与图形视图之Graphics View坐标系的简单介绍-CSDN博客

Qt绘图与图形视图之基本图元绘制的简单介绍-CSDN博客

Qt绘图与图形视图之自定义图元实现拖拽、拉伸、旋转功能-CSDN博客

Qt模型视图代理之MVD(模型-视图-代理)概念的简单介绍

一、基本概念

Qt模型视图代理,也可以称为MVD模式,

模型(model)、视图(view)、代理(delegate),主要用来显示编辑数据。

记住关键词:显示、编辑。

Qt模型-视图-代理是Qt框架中用于实现数据展示和交互的重要机制。

二、什么是模型-视图-代理

1、模型(model)

模型(Model)是视图与原始数据之间的接口,原始数据可以是数据库的一个数据表、内存中的一个StringList,磁盘文件结构等。

|--------------------------------------------|
| 模型是数据的抽象接口,用于存储、检索和操作数据。 |
| 模型负责管理数据的结构和内容,提供数据的读取、写入和修改功能。 |
| 模型与视图和代理之间起到了桥梁的作用,使得数据能够以一种通用的方式被视图显示和修改。 |

QsqlTableModel表示数据库中数据表的模型

QAbstractltemModel所有模型的祖宗类,其它model类 都派生于它。

2、视图(View)

视图(View)是显示和编辑数据的界面组件。主要的视图组件有QListView、QTreeView和QTableView,QListWidget、QTreeWidget和QTableWidget是视图类的简化版,它们不使用数据模型,而是将数据直接存储在组件的每个项里。

|---------------------------------------|
| 视图是用来展示模型中数据的UI组件 |
| 视图可以显示模型中的数据,支持数据的排序、过滤、选择等操作。 |
| 视图负责将模型中的数据以可视化的方式呈现给用户,并允许用户与数据进行交互。 |

就数据操作而言,单列的列表数据,适合一维数据操作,显示表格操作,适合二维表格数据操作

3、代理(Delegate)

代理(Delegate)代理为视图组件提供辑数据编辑器,如在表格组件中,编辑一个单元格的数据时,缺省(默认)是使用一个QLineEdit编辑框。代理负责从数据模型获取相应的数据,然后显示在编辑器里,修改数据后,又将其保存到数据模型中。

代理是模型和视图之间的中间层,用于对模型数据进行过滤、排序、修改等操作,以满足视图的需求。

代理可以对模型中的数据进行转换和处理,使得视图能够以不同的方式展示数据,同时保持模型数据的不变。

常见的代理包括QSortFilterProxyModel、QIdentityProxyModel等,用于实现数据的排序、过滤等功能。

QAbstractltemDelegate是所有代理类的抽象基类。

QStyledltemDelegate是视图组件使用的缺省(默认)的代理类。

4、作用

通过模型-视图-代理机制,Qt框架实现了数据与UI的分离,使得数据可以独立于UI进行管理和操作,同时提供了灵活的方式来展示和交互数据。这种设计模式使得Qt应用程序更易于维护和扩展,提高了代码的可读性和可重用性。

三、模型索引

模型索引(Model、Index)是在Qt中用于唯一标识模型中数据项的类。

模型索引包含了指向特定数据项的行号和列号等信息,以便视图可以准确地定位和访问模型中的数据。模型索引在模型-视图架构中起着非常重要的作用,因为它们允许视图根据索引从模型中检索数据,并在视图中正确地显示数据。

在使用代理模型时,代理模型通常会使用模型索引来访问原始模型中的数据,并对数据进行转换、过滤或其他操作,然后将处理后的数据提供给视图进行显示。通过模型索引,代理模型可以准确地定位原始模型中的数据项,并对其进行处理。


以上就是Qt里MVD(模型-视图-代理)概念的简单介绍。

都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!

相关推荐
神仙别闹3 小时前
基于 C++ 实现(控制台)学生成绩管理系统
开发语言·c++
伞伞悦读3 小时前
【第36期】Python 目录与路径详解:pathlib、文件遍历、创建、复制、移动和删除风险
开发语言·python
2601_966949656 小时前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
m0_734571766 小时前
深入理解5g <十八>传输块tbsize的计算
开发语言·5g
RAN11426760088 小时前
1.3第一个程序的介绍
开发语言·qt
blue_ice .8 小时前
Verilog DDS 数字信号发生器:DAC 输出模拟波形与 ADC 回采观测
开发语言·单片机·嵌入式硬件·fpga开发
远翔调光芯片^138287988729 小时前
ECP5702能芯科技PD取电芯片在市场上的优势有哪些?
开发语言·人工智能·单片机·嵌入式硬件·智能家居
泡海椒10 小时前
规则引擎对比:JQuick-Java vs Drools 轻量场景选型对比
java·开发语言
泡泡鱼(敲代码中)10 小时前
Python 容器类型学习笔记:列表、元组、字典、集合
开发语言·笔记·python·pycharm
2501_9336707910 小时前
平台招商运营校招能力模型:数据分析、SQL与增长场景拆解
开发语言