上一篇文章介绍了如何使用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. iOS SDK:iOS调试技巧
  2. qt5.9.0调试如何查看变量的值_从0开发3D引擎(四):搭建测试环境
  3. filco蓝牙不好用_最新黑科技感应式音箱!无需接口不用蓝牙,放上手机 1s畅享动听音乐~...
  4. oracle or使用速度快马_使用mysqld_exporter监控MySQL并展示数据
  5. 实战:RediSearch 高性能的全文搜索引擎
  6. [Godot] Unity 的 animator 与 Godot 的 animplayer 的一点不同
  7. 小白python教学视频教程_小白零基础入门Python开发全套完整版
  8. (42)Verilog HDL 打两拍设计
  9. iostream, istream 和 ostream的区别
  10. 计算机无线网怎么安装教程,安装无线网必看 给家庭安装无线宽带WIFI的详细步骤(图)...
  11. 压缩图片和改变图片图形
  12. 微信小程序开发学习—Day1
  13. R循环有两个_海德汉数控系统G代码、M代码、循环大全
  14. pm2日志文件过大问题解决
  15. 查看局域网所有MAC地址
  16. 养生的方法有哪些 十种长寿方法,全是免费的!
  17. attiny13a程序实例_如何使用Arduino IDE编程ATTINY13/ATTINY13A单片机
  18. 泛微软件的CMMI配置管理实施法
  19. 【深度学习笔记】图像处理领域的不适定问题(ill-posed problem)
  20. JavaScript知识点4

热门文章

  1. java excel添加公式_Java 添加、读取 Excel 公式
  2. 建模实训报告总结_模型实训心得体会
  3. Mediawiki安装经验分享
  4. m基于迫零ZF准则的通信均衡器的matlab仿真
  5. 致远互联发布A6+在打什么牌?
  6. 【六袆 - Java】跟WebService说Hola;入门WebService;
  7. php中下载csv文件怎么打开,php – 下载csv文件
  8. Jmeter(五)bayboy录制时弹窗“当前页面的脚本发生错误”解决办法
  9. 『IT视界』 [IT风云]MyEclipse 8.5 开发环境配置 插件安装(转载)
  10. sha1校验工具 linux,Linux怎么校验SHA1和MD5