从这一节开始,我们进入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
分享到:
相关推荐
15. **Model-View架构** —— 探讨Qt的模型-视图架构,学习如何设计可扩展的应用程序。 16. **自定义Model** —— 学习如何根据特定需求创建自定义的数据模型。 17. **自定义委托** —— 介绍如何使用自定义委托增强...
总结来说,Qt的Model/View架构为数据驱动的用户界面提供了强大且灵活的框架,通过分离数据、表示和用户交互,提高了代码的可维护性和复用性。开发者可以根据需求选择预定义的组件或创建自定义组件,以实现复杂的数据...
### Qt学习之路知识点总结 #### 一、前言:Qt简介与选择 - **Qt**是一种跨平台的应用程序开发框架,广泛应用于桌面、移动设备及嵌入式系统的GUI应用程序开发。 - C++的GUI编程并非C++标准的一部分,因此开发者在...
3. **MVC架构**:Qt采用Model-View-Controller(MVC)设计模式,使代码结构清晰,易于维护。 4. **QML**:Qt Quick(QML)是Qt的一种声明式语言,用于构建高效的用户界面,结合JavaScript实现动态交互。 5. **C++...
### Qt学习之路:核心知识点概览 #### 一、前言 - **Qt简介**:Qt是一个跨平台的C++图形用户界面应用程序开发框架。它不仅支持Windows、macOS、Linux等主流操作系统,还能用于开发嵌入式系统、移动设备应用(如...
在Model-View架构部分,学习者将了解到如何使用Qt提供的QModel、QView和QDelegate类来构建模型-视图应用程序。 ### 自定义Model与委托 在某些复杂情况下,内置的模型和委托可能不足以满足需求,此时需要自定义Model...
model/view架构 - **定义**: 一种将数据模型与视图分离的设计模式。 - **用途**: 提高代码的可维护性和扩展性。 - **核心组件**: `QAbstractItemModel`、`QTreeView`等。 #### 结论 - **整体评价**: 《Qt学习之路2...
标题《pyqt-model-view-framework-overview.pdf》表明,这篇文章是对PyQt的模型/视图框架的快速概览。PyQt是一个跨平台的C++和Python应用程序的界面框架,它利用Qt库,后者是一个用于开发GUI应用程序的C++库。 描述...
Qt的ModelView模式是Qt框架中用于数据展示和交互的核心机制,主要分为Model、View、Delegate和Selection Model四个部分,其设计灵感来源于经典的MVC(Model-View-Controller)架构。 1. Model(模型): Model是...
标题《QT学习之路》指明了文档的主要内容,即向读者介绍如何学习Qt这一跨平台的C++图形用户界面应用程序开发框架。Qt是一个功能强大的工具,能够用来开发具有图形用户界面的应用程序,并且支持多种操作系统平台,如...
- Model-View架构的基本原理与优势。 - 如何在Qt项目中实现MVC或MVVM模式。 #### 征服桌面用户界面 **知识点:** - **创建GUI与核心共享库链接:** - 共享库在Qt项目中的应用方式。 - 如何构建一个与GUI分离...
在深入探讨文档内容前,需明确“Qt学习之路2”这篇文档的主要目的是指导初学者如何学习和掌握Qt框架,这是一个广泛应用于软件开发中的跨平台C++图形用户界面应用程序框架。文档由Andy_Liu整理,包含了大量的章节,从...
1. **Qt Model-View架构**: Qt的Model-View-Controller(MVC)架构是其数据展示的核心机制。在这个架构中,**Model**负责存储和管理数据,**View**负责数据的可视化呈现,而**Controller**(在Qt中通常称为...
- 视图-模型分离:支持Model-View架构 - 部署:需要.NET框架 2. **MFC**: - 界面库名称:Microsoft Foundation Classes - 接口设计:基于宏和虚拟函数,使用资源编译器 - 界面编辑器:仅限于Visual Studio,...
7. 多线程支持:Qt ModelView架构支持在多线程环境中工作,可以安全地在不同线程间更新模型,提高应用程序的响应速度和用户体验。 8. 自定义视图:除了预定义的视图类,Qt还允许开发者创建自定义视图,这可以实现...