MVC视图和控制器对象相结合,其结果是模型/视图结构,仍然分离了数据与呈现给用户的方式,使得它可以在几个不同的视图中显示相同的数据,并实现新类型的视图而无需改变底层的数据结构。为了灵活的处理数据输入,则引入委托的概念。在此框架中引入委托的有点事:允许项目数据显示和自定义编辑。

模型与数据源进行通信,在这个体系结构中为其它组件提供了一个接口。通信的性质依赖于数据源的类型以及模型的实现方式。

视图从模型中得到模型索引,这些都是引用到数据项。通过为模型提供模型索引,视图可以从数据远中检索数据项。

在标准的视图里,委托呈现数据项目。当一个项目被编辑,委托和模型直接利用模型索引进行通信。

模型、视图、委托使用信号和槽相互通信

模型

所有模型都是基于QAbstractItemModel类。这个类定义了一个使用视图和委托来访问数据的接口,QAbstractListModel和QAbstractTableModel

Qt提供了一些现成的模型,可以用来处理数据项:

QStringListModel,QStandardItemModel,QFileSystemModel,

视图

基于QAbstractItemView抽象基类,QListView,QTableView,QTreeView

委托

QAbstractItemDelegate在模型/视图框架中代表抽象的基类。默认的委托有QStyledItemDelegate提供,这被Qt的标准视图用作默认的委托。然而,QStyledItemDelegate和QItemDelegate独立代替绘画,且为视图提供编辑器。它们之间的区别在于QStyledItemDelegate使用当前样式来绘制项目。

Model indexes

视图和委托通过模型索引来请求显示的数据项,模型只需要知道如何获取数据,并通过模型管理的数据的类型可以被相当普遍的定义。

临时模型索引由QModelIndex类提供,持久性模型索引由QPersistentModeIndex类提供,取得对应于数据项的模型索引,模型中必须制定三个属性:一个行号,一个列号,以及父项的模型索引

项目角色

模型中的项目可以为其它组件演绎不同的角色,允许为不同的情况提供不同类型的数据。通常情况下,包含数据的项目用于若干不同的角色,且标准角色被QT::ItemDataRole定义

我们可以通过模型索引传递给项目的项目向模型请求项目数据,并通过指定一个角色来获取想要的数据类型

数据类型被称为模型的角色指示器。视图可以以不同的方式显示角色,因此,为每个角色提供相应的信息非常重要。

委托

控制委托的标准接口在QAbstractItemDelegate类中定义,Qt提供的标准视图中使用QItemDelegate。委托接口的默认实现以一贯风格来呈现项目为每个标准视图:QListView、QTableView、QTreeView。

所有标准角色由所使用的标准视图中的默认委托处理。

Qt模型/视图、委托的更多相关文章

  1. Qt 模型/视图/委托

    模型.视图.委托 模型/视图架构基于MVC设计模式发展而来.MVC中,模型(Model)用来表示数据:视图(View)是界面,用来显示数据:控制(Controller)定义界面对用户输入的反应方式. ...

  2. PyQt5模型视图委托

    Model-View-Delegate 模型视图委托(MVD)是PyQt中特有的设计模式,类似MVC设计模式,将MVC设计模式中的Controller当做MVD中的Delegate,两者的概念基本相同 ...

  3. Qt模型/视图框架----简单的例子

    #include<qapplication.h> #include<qfilesystemmodel.h> #include<qtreeview.h> #inclu ...

  4. 38.Qt模型/视图结构

    1.模型/视图类 2.模型 3.视图 4.代理 1 模型/视图类 InterView框架提供了一些可以直接使用的模型类和视图类,如QStandardModel类,QDirModel类,QStringL ...

  5. Qt 模型/视图结构

    MVC是一种与用户界面相关的设计模式.通过使用此模型,可以有效地分离数据和用户界面.MVC设计模式包含三要素:表示数据的模型(Model).表示用户界面的视图(View)和定义了用户在界面上的操作控制 ...

  6. Qt模型视图结构遇见的小问题

    在本文的最开始,我们来看两个帮助文档内容: selectionMode : SelectionMode This property holds which selection mode the vie ...

  7. 【转】Qt之模型/视图

    [本文转自]http://blog.sina.com.cn/s/blog_a6fb6cc90101hh20.html   作者: 一去丶二三里 关于Qt中MVC的介绍与使用,助手中有一节模型/视图编程 ...

  8. Qt之模型/视图(委托)

    概念 不同于模型 - 视图 - 控制器模式,模型/视图设计不包括用于管理与用户交互的一个完全独立的组件.一般情况,视图负责将模型数据呈现给用户以及处理用户输入.为了输入更加具有灵活性,则由委托来执行交 ...

  9. Qt之模型/视图(自定义进度条)

    简述 在之前的章节中分享过关于QHeaderView表头排序.添加复选框等内容,相信大家模型/视图.自定义风格有了一定的了解,下面我们来分享一个更常用的内容-自定义进度条. 实现方式: 从QAbstr ...

随机推荐

  1. 慕课linux学习笔记(四)常用命令(1)

    Root 表示当前登录用户 Localhost 主机名 ~ 当前所在位置(~表示/root) # 超级用户 $ 普通用户 命令 1.pwd 显示当前所在位置 2.ls 查询目录中的内容 -a 显示所有 ...

  2. windows下自动删除n天前的文件

    使用windows2003下的内置命令forfiles配合计划任务可以实现自动删除n天前的文件. windows2003中设定自动执行的计划任务很简单. 一.脚本编写 forfiles命令用法: Fo ...

  3. php随机获取金山词霸每日一句

    header('Content-Type:text/html; charset=utf-8'); $nowyear=date("Y"); $nowmouth = date('m') ...

  4. PHP面向对象编程快速入门

    面向对象编程(OOP)是我们编程的一项基本技能,PHP4对OOP提供了良好的支持.如何使用OOP的思想来进行PHP的高级编程,对于提高PHP编程能力和规划好Web开发构架都是非常有意义的.下面我们就通 ...

  5. php每秒输出一次

    首先说到php.ini中的两个配置 output_buffering配置•Off: 表示关闭PHP输出缓存•On: 打开无限大的输出缓存•4096: 打开大小为4096Byte的输出缓存(默认) im ...

  6. ibatis 更改resultmap后 java.sql.SQLException: Column 'del_status' not found.

    当在resultmap中增加字段后,查询语句也必须增加相应字段,否则会报错, java.sql.SQLException: Column 'del_status' not found. 因为查询结果与 ...

  7. Oracle字符函数(转换大小写,替换等)

    在oracle中,有一些字符函数: upper(字符串):转换为大写lower(字符串):转换为小写initcap(字符串):首字母大写replace(字符串1,字符串2,字符串3):将串1中所有的串 ...

  8. C 程序提升效率的10种方法

    本文向你介绍规范你的C代码的10种方法(引用地址http://forum.eepw.com.cn/thread/250025/1).   1. 避免不必要的函数调用 考虑下面的2个函数: void s ...

  9. ps存jpeg,格式保存的时候为什么选择“基线”

    jpeg是印前和网页设计常用的格式,最大好处就是能很大程度上压缩图像大小. 在ps中将图片保存为jpeg格式的时候会出现以下选项: 其中:图像选项都很熟悉,是关于图像质量的:而格式选项的用途主要是针对 ...

  10. Django 403错误:CSRF verification failed. Request aborted

    网上有解决办法,我自己的组合是: 一,FORM加标识 <form action="" method="post"> {% csrf_token %} ...