Qt 实战(10)MVD | 10.1、MVD机制详解

news2024/12/23 16:40:54

文章目录

  • 一、MVD机制
    • 1、MVC设计模式
      • 1.1、简介
      • 1.2、优缺点分析
    • 2、什么是MVD?
      • 2.1、简介
      • 2.2、核心角色

前言:

在Qt框架中,MVD(Model-View-Delegate)机制是一种用于实现数据与用户界面分离的重要设计模式。它源于经典的MVC(Model-View-Controller)设计模式,但在Qt中进行了适当的调整和优化,将Controller的角色融入到了Delegate中,使得整个框架更加简洁高效。本文将详细介绍MVD机制的原理、实现机制以及使用场景。

一、MVD机制

1、MVC设计模式

1.1、简介

介绍MVD之前,先介绍下MVC设计模式。MVC是一种与用户界面相关的设计模式,通过使用该设计模式,可以有效的分离数据与用户界面。MVC设计模式包含三个元素:表示数据的模型(Model)、表示用户界面的视图(View) 和定义了用户在界面上操作的控制器(Controller),这三者的主要职责,如下:

  • 视图层(View): 用户看到并与之交互的界面(例如:网页界面或软件的客户端界面),负责显示模型中的数据。
  • 模型层(Model): 指从现实世界中抽象出来的对象模型,它封装了数据和对数据的操作,是实际进行数据处理的地方。
  • 控制器(Controller): 处理用户交互操作(鼠标事件、键盘事件、用户输入),并调用模型和视图去完成用户的需求。控制器本身不输出任何东西和做任何处理,它只是接收用户交互操作并决定调用哪个模型构件去处理,然后再确定用哪个视图来显示返回的数据。

1.2、优缺点分析

下面是对MVC的优缺点进行分析,如下:

优点:

  • 多视图共享一个模型,大大提高了代码的可重用性
  • MVC 三个模块相互独立,松耦合架构
  • 控制器提高了应用程序的灵活性和可配置性

缺点:

  • 原理复杂
  • 增加了系统结构和实现的复杂性
  • 视图对模型数据的低效率访问

通过 MVC 设计模式最终可以打造出一个松耦合+高可重用性+高可适用性的完美架构。但是、MVC 并不适合小型甚至中型规模的项目,花费大量时间将 MVC 应用到规模并不是很大的应用程序,通常得不偿失,所以对于 MVC 设计模式的使用要根据具体的应用场景来决定。

2、什么是MVD?

2.1、简介

与MVC设计模式类似、Qt引入了模型/视图结构用于完成界面与数据分离。但是不同的是,Qt的模型/视图结构把视图与控制器部件结合在一起,使得框架更加的简洁。为了灵活的处理用户输入,Qt的模型/视图框架引入了代理(Delegate),通过使用代理,能够自定义数据条目(item)的显示和编辑方式,如下:

在这里插入图片描述

2.2、核心角色

MVD机制由三部分组成:Model(模型)、View(视图)和Delegate(代理)。这三部分各司其职,共同实现了数据与界面的分离,提高了应用程序的可维护性和扩展性。

  • Model(模型): 负责存储和管理数据。模型是数据的核心,它独立于视图和代理存在,可以通过接口提供数据的存取服务。在Qt中,自定义模型通常通过继承QAbstractItemModelQAbstractListModelQAbstractTableModel等抽象基类来实现。
  • View(视图): 负责数据的显示。视图从模型中获取数据,并通过界面将其展示给用户。在Qt中,视图类如QListViewQTreeViewQTableView等,都内置了对模型数据的展示逻辑。视图通过模型索引(ModelIndex)来引用模型中的数据项。
  • Delegate(代理): 负责数据的显示和编辑逻辑。在MVD机制中,代理不仅仅是简单的数据渲染器,它还负责处理数据的编辑逻辑。通过代理,用户可以自定义数据的显示方式和编辑行为。在Qt中,代理通常通过继承QStyledItemDelegateQItemDelegate等类来实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2097004.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python 下载油管视频的评论

先说结果: 2024年9月2日上午, 能运行! 起因(目的): Not Like Us 这首歌, 1.5亿播放量,34万个评论。 有时候很想知道大家都说了什么。 Youtube 也是互联网的一霸, 大公司。 想爬人家的数据, 先做好失败的心理准备。 …

不同框架下跑yolov10(pt、onnx_runtime、tensorrt)

不同框架下跑yolov10(pt、onnx_runtime、tensorrt) (qq.com)

cmake版本升级 CMake Error: Could not find CMAKE_ROOT !!!

背景 ubuntu默认安装cmake较低版本,但是有些开发环境需要较高的版本,这时候需要手动升级一波. 1 官网获取cmake安装包 https://cmake.org/files/LatestRelease/,cmak官网下载 下载后,放到ubuntu里面,然后解压. tar zxvf *.gz 解压之后, cd cmake-3.30.0-Linux-x86_64/bin/, …

asp.net Temporary ASP.NET Files修改为其他位置

Temporary ASP.NET Files这个文件夹是编译期间用于临时文件存储的目录。当请求一个新页面时ASP.NET会分析aspx页面并为其生成一个.cs文件,然后JIT编译器会编译这个cs生成一个dll,这些过程都是在这个目录里面进行的。其中还放了你在项目中引用的Assembly的…

[CTF]-Pwn:做题笔记

seccon2018_kindvm解析(vm): 查看保护 这里有两次输入。 完整exp: from pwn import* pprocess(./kindvm)p.sendlineafter(bInput your name :,bflag) payloadb\x01\x00\xff\xd8 payloadb\x02\xff\xdc\x00 payloadb\x06 p.sendl…

FastAPI+Vue3零基础开发ERP系统项目实战课 20240831上课笔记 查询参数和分页实现

回顾 获取路径参数什么是路径参数?/user/{id}什么时候使用?需要传递参数怎么实现类型转换?声明参数的类型怎么捕获文件路径?{file_path:path} 什么是查询参数 查询字符串是键值对的集合,这些键值对位于 URL 的 ? 之…

深兰科技荣登《2024胡润中国元宇宙潜力企业榜》Top100

8月29日,“胡润中国元宇宙高峰论坛”在广州南沙隆重召开。论坛期间,胡润研究院发布了《2024胡润中国元宇宙潜力企业榜》,列出了元宇宙领域最具发展潜力和影响力的中国企业,深兰科技成功入围《2024胡润中国元宇宙潜力企业榜》Top10…

基质粘弹性咋回事?与组织生长啥关系?快来看看!

大家好,今天我们要来了解一个关于细胞外基质的有趣话题——《Matrix viscoelasticity controls spatio-temporal tissue organization》发表于《Nature materials》。细胞外基质的粘弹性对组织的时空组织起着重要作用,但这一作用尚未被完全理解。我们将通…

生成图片的base64编码(纯C语言实现)

一、前言 Base64编码是一种广泛使用的编码方案,将任意二进制数据转换为可打印的ASCII字符字符串。这种编码方式之所以重要,是因为许多通信协议和存储介质对数据的可传输性和可存储性有特定的要求,它们可能无法直接处理或有效传输二进制数据。…

[进阶]面向对象之static关键字

文章目录 一、什么是static关键字为什么要设置static关键字二、static的使用规则1、static修饰变量:2.static的修饰方法 练习(定义数组工具类)练习2(定义学生工具类)三、static的注意事项 一、什么是static关键字 static关键字是…

美国高防服务器运行《黑神话:悟空》配置需求及优化方法

《黑神话:悟空》作为一款备受关注的动作角色扮演游戏,其对计算资源和图形处理能力的需求相当高。在这种背景下,云服务器成为了一个能够提供强大支持的选项。下面将分析美国高防服务器在运行《黑神话:悟空》时的配置需求及优化方法…

微服务CI/CD实践(五)Jenkins Docker 自动化构建部署Node服务

微服务CI/CD实践系列: 微服务CI/CD实践(一)环境准备及虚拟机创建 微服务CI/CD实践(二)服务器先决准备 微服务CI/CD实践(三)gitlab部署及nexus3部署 微服务CI/CD实践(四&#xff09…

为什么现在那么多人用骨传导耳机?怎么选骨传导耳机?答案来了!

随着健康生活观念的深入人心,运动健身已成为一种生活态度,而音乐则是这场健康之旅中不可或缺的伴侣。然而,传统耳机在运动时的不便促使市场呼唤更加人性化的产品。骨传导耳机的出现,正是对这一需求的精准把握。它采用非入耳技术&a…

VTK平面切割

文章目录 一、vtkClipPolyData二、CapClip三、SolidClip四、vtkClipClosedSurface 本文的主要内容:简单介绍VTK中通过平面切割模型的相关功能。 哪些人适合阅读本文:有一定VTK基础的人。 一、vtkClipPolyData VTK官网描述: vtkClipPolyData使…

AI绘画 | Stable diffusion 修复老照片

大家好呀!今天我要和大家分享一个使用Stable diffusion修复老照片的功能。 你有没有遇到这样的问题:想要修复一张老照片,但是发现照片质量太差,噪点太多,根本无法修复? 别担心!Stable diffusio…

DS18B20温度传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.工作时序 3.工作原理:复位脉冲与应答脉冲 4.工作原理:写时序 5.工作原理:读时序 6.工作原理:DS18B20读取的数据格式 7.工作原理:DS18B20配置步骤 三、程序设计 ma…

vue 批量自动引入并注册组件或路由

有时候有大量的组件.vue后缀的,或.js,或.ts文件, 需要一个个的手动引入很麻烦,那么你可以尝试这样创建一个index.js 本项目使用vue3.x, vue2.x也可以照样用; 这里在components里面创建了一个idnex.js 文件 require.context 可以读取文件, 第一个参数是指当前文件夹, 第二个参…

路径优化 minimum-snap(对A*的全局路径进行优化)

实现效果: 介绍: 使用Astar进行路径规划,使用minimum-snap进行路径优化处理,建议参考文章: 【附源码和详细的公式推导】Minimum Snap轨迹生成,闭式求解Minimum Snap问题,机器人轨迹优化&#…

泥水位监测站——水文百科

传统的水位监测往往依赖于人工定期巡检,这不仅费时费力,而且可能受到天气、交通等多种因素的限制。而水位监测站的全自动化监测则能够24小时不间断地工作,无需人员现场值守,从而显著减少了人工巡检的次数和成本。自动化监测系统能…

全面解析BotSharp:如何利用.Net和LLMs革新你的业务系统

作为一名关注.Net与AI相关技术的博主,今天我要推荐一个开源项目——BotSharp。BotSharp 是一个基于 .Net的智能代理应用程序构建框架,专注于连接大型语言模型(LLMs)到现有业务系统中,以促进会话即平台(Conversation as…