`
izuoyan
  • 浏览: 9224188 次
  • 性别: 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学习之路---尤其适用Qt初学者

    15. **Model-View架构** —— 探讨Qt的模型-视图架构,学习如何设计可扩展的应用程序。 16. **自定义Model** —— 学习如何根据特定需求创建自定义的数据模型。 17. **自定义委托** —— 介绍如何使用自定义委托增强...

    Qt-Model-View-学习笔记.pdf

    总结来说,Qt的Model/View架构为数据驱动的用户界面提供了强大且灵活的框架,通过分离数据、表示和用户交互,提高了代码的可维护性和复用性。开发者可以根据需求选择预定义的组件或创建自定义组件,以实现复杂的数据...

    其实这本PDF就是Qt学习之路第一版

    ### Qt学习之路知识点总结 #### 一、前言:Qt简介与选择 - **Qt**是一种跨平台的应用程序开发框架,广泛应用于桌面、移动设备及嵌入式系统的GUI应用程序开发。 - C++的GUI编程并非C++标准的一部分,因此开发者在...

    Qt-unified-windows-x86-3.2.3-online.rar

    3. **MVC架构**:Qt采用Model-View-Controller(MVC)设计模式,使代码结构清晰,易于维护。 4. **QML**:Qt Quick(QML)是Qt的一种声明式语言,用于构建高效的用户界面,结合JavaScript实现动态交互。 5. **C++...

    Qt 学习之路:DZY

    ### Qt学习之路:核心知识点概览 #### 一、前言 - **Qt简介**:Qt是一个跨平台的C++图形用户界面应用程序开发框架。它不仅支持Windows、macOS、Linux等主流操作系统,还能用于开发嵌入式系统、移动设备应用(如...

    Qt学习之路(1-60)

    在Model-View架构部分,学习者将了解到如何使用Qt提供的QModel、QView和QDelegate类来构建模型-视图应用程序。 ### 自定义Model与委托 在某些复杂情况下,内置的模型和委托可能不足以满足需求,此时需要自定义Model...

    Qt+学习之路+2

    model/view架构 - **定义**: 一种将数据模型与视图分离的设计模式。 - **用途**: 提高代码的可维护性和扩展性。 - **核心组件**: `QAbstractItemModel`、`QTreeView`等。 #### 结论 - **整体评价**: 《Qt学习之路2...

    pyqt-model-view-framework-overview.pdf

    标题《pyqt-model-view-framework-overview.pdf》表明,这篇文章是对PyQt的模型/视图框架的快速概览。PyQt是一个跨平台的C++和Python应用程序的界面框架,它利用Qt库,后者是一个用于开发GUI应用程序的C++库。 描述...

    Qt - ModelView模式学习笔记.pdf

    Qt的ModelView模式是Qt框架中用于数据展示和交互的核心机制,主要分为Model、View、Delegate和Selection Model四个部分,其设计灵感来源于经典的MVC(Model-View-Controller)架构。 1. Model(模型): Model是...

    QT学习之路

    标题《QT学习之路》指明了文档的主要内容,即向读者介绍如何学习Qt这一跨平台的C++图形用户界面应用程序开发框架。Qt是一个功能强大的工具,能够用来开发具有图形用户界面的应用程序,并且支持多种操作系统平台,如...

    Packt.Mastering.Qt.5

    - Model-View架构的基本原理与优势。 - 如何在Qt项目中实现MVC或MVVM模式。 #### 征服桌面用户界面 **知识点:** - **创建GUI与核心共享库链接:** - 共享库在Qt项目中的应用方式。 - 如何构建一个与GUI分离...

    Qt学习之路2

    在深入探讨文档内容前,需明确“Qt学习之路2”这篇文档的主要目的是指导初学者如何学习和掌握Qt框架,这是一个广泛应用于软件开发中的跨平台C++图形用户界面应用程序框架。文档由Andy_Liu整理,包含了大量的章节,从...

    Qt Mode-lView+Xml

    1. **Qt Model-View架构**: Qt的Model-View-Controller(MVC)架构是其数据展示的核心机制。在这个架构中,**Model**负责存储和管理数据,**View**负责数据的可视化呈现,而**Controller**(在Qt中通常称为...

    C++下Windows Forms + MFC + WTL + .pdf

    - 视图-模型分离:支持Model-View架构 - 部署:需要.NET框架 2. **MFC**: - 界面库名称:Microsoft Foundation Classes - 接口设计:基于宏和虚拟函数,使用资源编译器 - 界面编辑器:仅限于Visual Studio,...

    Qt ModelView 学习笔记

    7. 多线程支持:Qt ModelView架构支持在多线程环境中工作,可以安全地在不同线程间更新模型,提高应用程序的响应速度和用户体验。 8. 自定义视图:除了预定义的视图类,Qt还允许开发者创建自定义视图,这可以实现...

Global site tag (gtag.js) - Google Analytics