`
izuoyan
  • 浏览: 8934647 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Qt学习之路(38): model-view架构

阅读更多
版权声明: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://devbean.blog.51cto.com/448512/250566
从这一节开始,我们进入model-view阶段。这一阶段主要还是依据 C++ GUI Programming with Qt4, 2nd Edition。
我们的系统有很多数据显示的需求,比如从数据库中把数据取出,然后以自己的方式显示在我们自己的应用程序的界面中。进行这一操作的典型方式是使用Qt的Item View类。
在早期的Qt版本中,要实现这个功能,我们需要定义一个widget,然后在这个widget中保存一个数据 对象,比如是个list,然后我们对这个list进行查找、插入等的操作,或者把修改的地方写回这个list,然后刷新widget进行显示。这个思路很 简单,也很清晰,但是对于大型程序,这种设计就显得苍白无力。比如,在一个大型系统中,你的数据可能很大,如果全部存入一个widget的数据对象中,效 率会很低,并且这样的设计也很难在widgets之间共享变量,也就是说,如果你要几个组件共享一个数据对象,要么你就要用getter函数公开这个数据 对象,要么你就必须把这个数据对象放进不同的组件分别进行维护。
Smalltalk语言发明了一种崭新的实现,用来解决这个问题,这就是著名的MVC模型。对这个模型无需多 言,简单来说,这是一个model-view-controller模型,即模型-视图-控制器。在MVC中,模型负责获取需要显示的数据,并且能够存储 这些数据的修改。每种数据类型都有它自己对应的模型,但是这些模型提供一个相同的API,用于隐藏内部实现。视图用于将模型数据显示给用户。对于很大的数 据,或许只显示一小部分,这样就能很好的提高性能。控制器是模型和视图之间的媒介,将用户的动作解析成对数据的操作,比如查找数据或者修改数据,然后转发 给模型执行,最后再将模型中需要被显示的数据直接转发给视图进行显示。
对于Qt而言,它使用的是一个类似于MVC模型的model-view架构。其中,model就相当于MVC 架构中的model,而对于控制器部分,Qt使用的是另外的一种抽象,代理delegate。代理被用来提供对item渲染和编辑的控制。对于每种视 图,Qt都提供了一个默认的代理,对于大多数应用来说,我们只需要使用这个默认的代理即可。这其中的类关系如下图所示(出自C++ GUI Programming with Qt 4, 2nd Edition)
使用Qt的model-view架构,我们可以让model是取回view所要展示的数据,这样就可以在不降 低性能的情形下处理大量数据。并且你可以把一个model注册给多个view,让这些view能够显示同样的数据,也就是为同一个数据提供不同的显示方 式。Qt会自动地对这些view保持同步,自动刷新所有的view以显示最新的数据。这样,我们就可以只对model进行修改,view会自动更新。
在少量数据的情形下,我们不需要动用model这样重量级的组件。Qt为了方便起见也提供了item view类,分别是QListWidget,QTableWidget和QTreeWidget,使用这些类可以直接对item进行操作。这种实现很像 Qt早期版本,组件中包含了相应的item,例如QTableWidget中包含有QTableWidgetItem等。但是对于很大的数据,我们则需要 使用Qt的view类,比如QListView,QTabelView和QTreeView,同时需要提供一个model,可以是自定义model,也可 以是Qt预置的model。例如,如果数据来自数据库,那么你可以使用QTabelView和QSqlTableModel这两个类。
今天就说这些,下次我们将开始进入对model-view架构的具体介绍。

本文出自 “豆子空间 ” 博客,请务必保留此出处http://devbean.blog.51cto.com/448512/250566

分享到:
评论

相关推荐

    QT学习之路2 (1~82篇)

    41. model/view 架构 42. QListWidget、QTreeWidget 和 QTableWidget 43. QStringListModel 44. QFileSystemModel 45. 模型 46. 视图和委托 47. 视图选择 48. QSortFilterProxyModel 49. 自定义只读模型 50. 自定义...

    《Qt 学习之路 2》

    基于最新的Qt5.0.1的学习书籍,非常适合QT5的入门学习。 适合了解QT5与QT4区别的新手。 文章结构如下: 1 序 2 Qt 简介 3 Hello, world! 4 信号槽 5 自定义信号槽 6 Qt 模块简介 ...41 model/view 架构

    Qt学习之路2 (基于Qt5.0.1共58章)

    41. model/view 架构 42. QListWidget、QTreeWidget 和 QTableWidget 43. QStringListModel 44. QFileSystemModel 45. 模型 46. 视图和委托 47. 视图选择 48. QSortFilterProxyModel 49. 自定义只读模型 50. 自定义...

    Qt5.9C++开发指南 源码 资源.zip

    本书以Qt 5.9 LTS版本为开发平台,详细介绍了Qt C++开发应用程序的技术,包括Qt应用程序的基本架构、信号与槽工作机制、图形显示的Graphics/View架构、数据编辑和显示的Model/View架构、对话框和多窗口的设计与调用...

    王维波《Qt5.9 C++开发指南》(配套资源)

    图形显示的Graphics/View架构、数据编辑和显示的Model/View架构、对话框和多窗口的设计与调用方法等技术;也介绍了常用界面组件、文件读写、绘图、图表、数据可视化、数据库、多线程、网络、多媒体等模块的使用。每...

    毕设新项目-基于C++开发的校医院远程诊断系统源码+项目使用说明.zip

    通过Qt的Model/View架构完成表单与数据库的联动。 使用MySQL数据库存储患者的病历档案等信息。 使用OpenCV 的图像处理算法完成病灶检测和细胞计数等功能,对CT照片有很好的处理效果。 技术一:OpenCV 病灶检测功能 ...

    Qt5.9 c++开发指南.part1.rar

    Qt5.9 c++开发指南 详细介绍了 Qt C++开发应用程序的技术,包括QT应用程序的基本架构,信号与槽的工作机制,图像显示的Graphics/View架构,数据编辑和现实的Model/View架构

    Qt5.9 c++开发指南.part3.rar

    Qt5.9 c++开发指南 详细介绍了 Qt C++开发应用程序的技术,包括QT应用程序的基本架构,信号与槽的工作机制,图像显示的Graphics/View架构,数据编辑和现实的Model/View架构

    Qt5.9 c++开发指南.part2.rar

    Qt5.9 c++开发指南 详细介绍了 Qt C++开发应用程序的技术,包括QT应用程序的基本架构,信号与槽的工作机制,图像显示的Graphics/View架构,数据编辑和现实的Model/View架构

    editabletreemodel.rar

    一个配合本人博客Qt5开发总结——Model/View架构使用的例子。The model supports editable items, custom headers, and the ability to insert and remove rows and columns. With these features, it is also ...

    积分管理系统java源码-deepin-deb-installer:DDE的Debian软件包安装程序

    积分管理系统java源码 deepin-deb-installer 架构设计 前端 主窗口为 DebInstaller 类,前端主页面为 FileChooseWidget,它是一个文件选择界面,当用户选择了一个/多个 deb 文件后,进入后续的安装界面...Model-View 设

    software-design:软件设计,重构技术,SOLID面向对象设计,OOD

    针对Windows Presentation Application(WPF)的MVC和Model View Presenter(MVP)的量身定制的版本 重构技术 好吧,大多数时候我们都在进行一些重构,目的是为了改进源代码,以避免出现问题性的技术债务。

Global site tag (gtag.js) - Google Analytics