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(模型-视图-代理)概念的简单介绍。

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

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

相关推荐
程序喵大人2 分钟前
C++与C语言的核心区别是啥
c语言·开发语言·c++
jjjava2.03 分钟前
全面拆解 Java 锁:分类辨析 + 底层原理精讲
java·开发语言
曹牧4 分钟前
Java:import NeverUsed
java·开发语言·log4j
我不是懒洋洋16 分钟前
【C++】内存管理与模板(C++内存管理方式、new和delete的实现原理、malloc/free和new/delete的区别、函数模板、类模板)
c语言·开发语言·c++·青少年编程·visual studio
雪的季节17 分钟前
Qt多窗口架构设计需求简介
开发语言·qt
z2005093022 分钟前
【linux学习】深入理解 Linux 下的静态库与动态库
开发语言·c++·算法
韦胖漫谈IT23 分钟前
面向对象 vs 函数式背后的思维差异
开发语言
Xin_ye1008626 分钟前
C# 零基础到精通教程 - WPF 深度专题:3D 图形与视觉增强
开发语言·c#·wpf
zhangfeng11331 小时前
台大李宏毅老师讲解memba和类似linear atttenion 模型,笔记
开发语言·人工智能·笔记
Chris _data2 小时前
并发单词频率统计器 - 从零到完整实现(C# 实战)
开发语言·c#