上一篇文章介绍了如何使用QMenu创建鼠标菜单及其和槽函数的关联,本文开始介绍Qt中十分重要的Model/View 框架。

Model/View 框架

MVC是交互式系统开发中十分重要的体系,MVC 由三种对象组成。模型是应用程序对象,视图是其在屏幕上的呈现,控制器定义了用户界面对用户输入的反应方式。 在MVC之前,用户界面设计往往会将这些对象整合在一起。 MVC 使它们解耦以增加灵活性和重用性。在Qt中也包含这三个要素,分别是模型类、视图类和代理类。三者一起构成了Qt的Model/View 框架。 (如下介绍直接来自Qt的翻译,摘抄源于https://qtdoc.cn/Src/M/Model_View_Programming/Model_View_Programming.html)

Qt中包含了一系列的项目视图类,他们使用了模型/视图架构来管理数据和显示之间的关系。此架构的功能分离特征给开发人员在自定义项目的呈现形式时带来了很大的灵活性,并提供标准的模型接口,以允许将各种数据源与现有项目视图一起使用。在本文档中,我们对模型/视图进行了简要介绍,概述了所涉及的概念,并描述了项目视图系统的结构特征。介绍了体系结构中的每个组件,并给出了示例,这些示例告诉我们如何使用所提供的类。

如果将视图和控制器对象组合在一起,就是模型/视图架构。基于将数据的存储方式与向用户呈现的方式分开的原理,模型/视图架构提供了一个更简单的框架。这种分离使得可以在几个不同的视图中显示相同的数据,并实现新的视图类型,而无需更改基础数据结构。为了灵活处理用户输入,我们引入了委托的概念。在此框架中使用委托的好处在于,它允许自定义呈现和编辑数据项的方式。

模型与数据源通信,为架构中的其他组件提供接口。通信的性质取决于数据源的类型以及模型的实现方式。

视图从模型中获取模型索引; 这些索引是对数据项的引用。 通过向模型提供模型索引,视图可以从数据源检索出数据项。

在标准视图中,委托负责渲染显示数据项。 当编辑项目后,委托将直接通过模型索引与模型进行通信。
通常,模型/视图类可以分为上述三个组:模型,视图和委托。这些组件中的每个组件都由抽象类定义,这些抽象类提供了公共接口,并在某些情况下提供了一些功能的默认实现。抽象类应被子类化,以提供其他组件期望的全部功能;当然也可以编写专用组件。

模型、视图和委托之间通过信号槽通信。

数据源的数据发生改变时模型将发射信号通知视图。

用户交互发生改变时,视图将发射相应的信号。

在编辑期间,委托将发射信号来告知模型和视图有关编辑器的状态。

总之,Qt通过自身的模型类、视图类、代理类及项目之间的信号与槽体系一起构成了强大的MVC框架,实现后端数据-前段显示的解耦,通过代理模型等手段提供了同一数据不同视图的效果,大大提高了数据交互的效率。

后文将依次介绍如何基于Qt的MVC框架来开发用户自己的数据模型和视图方式,后期还要将模型、视图和曲线关联在一起来开发用户自己的数据分析可视化窗体。


欢迎同好沟通交流,批评指正,欢迎关注我的公号:不如起而行之

Qt系列文章之 Model/View 框架相关推荐

  1. 第15.22节 PyQt(Python+Qt)入门学习:Model/View架构详解

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.简介 在PyQt和Qt中,Model/View架构是图形界面开发时用于管理数据和界面展现方式的关 ...

  2. qt系列文章之激光雷达通信

    qt系列文章之激光雷达通信 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 qt通信学习入门之激光雷达通信 文章目录 qt系列文章之激光雷达通信 前言 0.效果 一.通 ...

  3. Qt系列文章001-Qt下载安装

    1 Qt下载 这边只介绍具体的下载地址,本文也是以Qt5.x系列为主,其他版本不涉及,因为Qt目前的大版本是5.x系列,最新版本最近刚更新到5.15.Qt6 于2020年年底发布,预览版已经出了,我尝 ...

  4. Qt系列文章之二十五(使用QAudiolnput获取音频输入)

    文章目录 前言 效果图 QAudioInput获取音频输入功能概述 程序主窗口定义与初始化 音频输入设备支持的格式 开始音频输入 流设备MineDisplayDevice的功能实现 源码获取 前言   ...

  5. Qt系列文章010-Qt容器类介绍

    1 前言    前面已经详细阐述了Qt 中QtGlobal 包含的常用数据类型和方法还有一些宏定义,因为篇幅的问题,所以做了上下两章来讲.方便各位消化和耐看!那么今天这章主要就是讲解Qt 独有的迭代器 ...

  6. Qt 用 MVD(model view delegate) 模式 把图片变为灰度像素点 [官方Example]

    前言: 今天看到一个好玩的 qt 官方的 demo 可以把图片 变为 一个个灰度的像素点 先来看一下 这个是 qt 的图片 这个是我加载的 我的头像 不过 看 这个 demo 需要了解 Qt 的 MV ...

  7. Hello Qt(三十三)——Model/View官方文档

    一.Model/View框架简介 Qt4推出了一组新的项视图类,使用Model/View框架来管理数据与表示层的关系.Model/View框架带来的功能上的分离给了开发人员更大的弹性来定制数据项的表示 ...

  8. Qt Model/View编程介绍

    Qt中包含了一系列的项视图类,它们使用model/view的架构去管理数据之间的关系以及它们被展示给用户的方式.这种由这种架构引进的功能分离特性给了开发者很大的灵活性去自定义自己的展示方式,并且提供了 ...

  9. 机器学习框架ML.NET学习笔记【1】基本概念与系列文章目录

    一.序言 微软的机器学习框架于2018年5月出了0.1版本,2019年5月发布1.0版本.期间各版本之间差异(包括命名空间.方法等)还是比较大的,随着1.0版发布,应该是趋于稳定了.之前在园子里也看到 ...

  10. Electron系列文章-什么是Electron?

    系列简介:本系列文章首先围绕Electron框架的关键知识点进行详细讲解,然后对DEMO程序进行分析,让前端开发人员对使用Electron开发桌面应用程序有一个初步的了解.该系列文章更新周期为每周1~ ...

最新文章

  1. 【spring】使用构造方法依赖注入
  2. Datawhale组队学习周报(第020周)
  3. Linux下的版本升级只是浮云
  4. (NO.00001)iOS游戏SpeedBoy Lite成形记(二十二)
  5. 李善友《认知升级之第一性原理》--507张PPT全解!_搜狐科技_搜狐网
  6. python模块编程教程_python进阶教程之模块(module)介绍
  7. java链表代码,java链表的基本使用 代码
  8. 常见排序算法的时间复杂度
  9. 对java android 中几种单例模式写法的总结
  10. python switch高效替代_Python中用什么代替switch
  11. java 注释工具栏_eclipse/intellij idea 查看java源码和注释方法
  12. python论坛签到_Python实现某论坛自动签到功能
  13. Bootstrap 第一天
  14. XFBAY学习笔记=++=实验十三 交换机和路由器组合实验
  15. python中测试字符串类型的函数_Python新手学习基础之数据类型——字符串类型
  16. python反编译软件下载_python批量反编译软件
  17. 计算机网络——常见协议
  18. CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://mirrors.tuna.tsi解决办法 亲测有效
  19. 用python编程一个图形_Python的图形化窗口编程(1)
  20. 教你文件重命名快速操作

热门文章

  1. day01 -Web API介绍—DOM 介绍—获取元素—事件基础—操作元素—排他操作—自定义属性操作—节点操作—案例:动态生成表格—创建元素的三种方式(经典面试题)
  2. JS基础——选项卡列表显示隐藏缩略图(函数传参)
  3. easyphp(xctf)
  4. ORA-01720: grant option does not exist for 'HWCUST.H_OKC_REGION_TERRITORY_T'
  5. Unity与Android权限设置
  6. 鸿蒙系统吹了多少年了还没出,实话实说,在鸿蒙系统上,余承东吹了几次牛都没实现...
  7. C++多线程同步效率对比之临界区和原子锁
  8. 年终盘点 | 2020年,国内私有云正式进入3.0时代
  9. 数据挖掘十大算法之决策树详解(2)
  10. node.js setup wizard ended prematurely 失败解决方法