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. Cocos2d-x 3.0 场景切换

    场景切换要用到导演类Director,一般有两种方式,大多数是用替换场景(replaceScene),也可以用进栈(pushScene)出栈(popScene)的方式进行场景的替换. 场景切换代码: ...

  2. sublime text 发现一个超好的编辑器

    垂直竖行多行编辑 鼠标中建拖动或 shift+右键拖动 切换文件 ctrl+p 输入文件名 可以拖动项目文件夹到sublime text左栏, 也可文件--打开文件夹--项目所在文件夹,但会在新窗口中 ...

  3. VMware网络配置 实现与物理机互访

    虚拟机和物理主机互访,两台机器可以互访并可以被局域网内其他机器访问,可以ping通并可以访问网站. 这几天正好有空搞个虚拟机,并装了不同系统,以备不同部署环境需要.明明是搞编程的,却不得不学各种知识, ...

  4. OAuth 2.0 开发完全详解

    --------------------------基础篇------------------------------- I:OAuth 2.0 概述 首先大家来看看国内新浪跟腾讯这两大头对OAuth ...

  5. Jasper_plug_install

    1.open eclipse -> Help -> Eclipse Marketplace. 2.at new window, find jasper, will find Jaspers ...

  6. [TYVJ] P1027 木瓜地

    木瓜地 背景 Background USACO OCT09 4TH   描述 Description Bessie不小心游荡出Farmer John的田地,而走进了相邻的农民的地.她举起一个木瓜,木瓜 ...

  7. 车的UML图

    车的UML图,涉及到集合与泛化的东东. UML统一建模语言,通过图能够很好的分析问题.

  8. 【剑指offer】面试题32:从1到n整数中1出现的次数

    题目: 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了.A ...

  9. Horner规则

    霍纳(Horner)规则是采用最少的乘法运算策略,求多项式 A(x) = a[n]x^n + a[n-1]x^(n-1) + ... + a[1]x^1 + a[0]x^0 在x处的值. 该规则为 A ...

  10. 【HDU1232】畅通工程(并查集基础题)

    裸敲并查集,很水一次AC #include <iostream> #include <cstring> #include <cstdlib> #include &l ...