模型-视图-代理(Model-View-Delegate)-理论篇

本文介绍了Qt中视图模型的概念及应用,详细解释了模型、视图和代理三者之间的关系,并通过TreeModel实例展示了如何索引和操作数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

在我们进行Qt 开发的时候,Qt为我们提供了QListWidget,QTableWidget,QTreeWidget ,他们的基类 分别是 QListView,QTableView,QTreeView。

这几个类特点是使用起来很方便,适合显示比较简单的数据,若是涉及到大量的数据要显示、以及对性能要求严格就得用到视图模型了。

二者的区别在于 QListWidget = QListView + Model

模型

我们先来看看模型
这里写图片描述

可以把模型嵌套在View 上。每个模型中中都有Item,来操控每一项。

下面使用Tree Model作为例子
这里写图片描述

  • Index用于索引model中的数据,相当于指针下标之类的效果

上图中,A项和C项作为model中顶层的兄弟项:

QModelIndex indexA = model->index(0, 0, QModelIndex());
QModelIndex indexC = model->index(2, 1, QModelIndex());

A有许多孩子,它的一个孩子B用以下代码获取:

QModelIndex indexB = model->index(1, 0, indexA);

通过上面几行代码,可以知道最后一个参数的作用。

视图

视图就是让数据显示出来,然而却无法和用户进行交互,此时便需要代理。

代理

delegate更灵活的处理用户的输入,能够自定义数据条目(item)的显示和编辑方式。

三者的关系

它们之间的关系如下:
- 数据发生改变时,模型发出信号通知视图。
- 用户对界面进行操作,视图发生信号。
- 代理发出信号告知模型和视图编辑器目前的状态。

关系图如下

这里写图片描述

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值