Qt模型/视图、委托

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。

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

时间: 2024-10-08 02:39:56

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

QT——模型/视图(model/view)

数据项中引入模型/视图架构,可以方便的将数据与表现层分开. ------------------------------------- 模型Model:一般来说,Model里面并不真正存储数据(数据少的话也可以直接存储在Model里),只是负责从诸如磁盘文件,数据库,网络通讯等获得源数据,并提供给View,View对数据进行修改,然后再通过Model更新源数据. Model 另一个重要工作时为源数据添加索引(ModelIndex).列表形式采用row/colum编号,树形式为建立父子间的层次关系

Qt模型/视图中的data和headerData

QAbstractItemModel QAbstractItemModel是一个抽象类,该抽象类未实现的纯虚方法有 QModelIndex QAbstractItemModel::index(int row, int column, const QModelIndex & parent = QModelIndex()) const [pure virtual] QModelIndex QAbstractItemModel::parent(const QModelIndex & index)

QT 模型/视图 编程 委托篇

委托类 概述 与模型-视图-控制器模式不同,模型/视图设计不包括用于管理与用户交互的完全独立的组件.通常,视图负责向用户表示模型数据,并处理用户输入.为了在获取输入的方式上允许一定的灵活性,交互由委托执行.这些组件提供输入功能,并负责在某些视图中呈现各个项.控制委托的标准接口在QAbstractItemDelegate类中定义. 委托应该能够通过实现paint()和sizeHint()函数来呈现它们自己的内容.然而,简单的基于widget的委托可以子类化QItemDelegate而不是QAbst

38.Qt模型/视图结构

1 模型/视图类 InterView框架提供了一些可以直接使用的模型类和视图类,如QStandardModel类,QDirModel类,QStringListModel类,以及QColumnView类,QHeaderView类,QListView类,QTableView类和QTreeView类 简单目录浏览器: 1 #include "mainwindow.h" 2 #include <QApplication> 3 4 #include <QAbstractItem

第61课 模型视图中的委托(上)

1. Qt模型视图对用户输入的处理 (1)传统的MVC设计模式 (2)Qt中的模型视图设计模式如何处理用户输入? ①视图中集成了处理用户输入的功能(即委托) ②视图将用户输入作为内部独立的子功能来实现 ③模型负责组织数据,视图负责显示数据,委托则用于编辑修改数据. 2. 模型视图中的委托 (1)委托(Delegate)是视图中处理用户输入的部件(如编辑框.单选按钮等) (2)视图可以设置委托对象用于处理用户输入 (3)委托对象负责创建和显示用户输入的上下文(内容),如编辑框的创建和显示. (4)

QT开发(八)——QT单元视图组件

QT开发(八)--QT单元视图组件 QT中有四种单元视图组件,分别为列表视图QListView.树形视图QTreeView.表格视图QTableView.列视图QColumnView. 一.QListView列表视图 1.QListView组件简介 QListView列表视图,继承自QAbstractItemView.QListView是基于模型的列表/图标视图,不显示表头和表框,为Qt的模型/视图结构提供了更灵活的方式. 2.QListView组件属性 QListView组件属性设置: A.n

Qt之模型/视图(委托)

概念 不同于模型 - 视图 - 控制器模式,模型/视图设计不包括用于管理与用户交互的一个完全独立的组件.一般情况,视图负责将模型数据呈现给用户以及处理用户输入.为了输入更加具有灵活性,则由委托来执行交互.这些组件提供输入功能,且在一些视图中还负责渲染个别项目.控制委托的标准接口在QAbstractItemDelegate类中定义. 委托能够通过实现的paint()和sizeHint()函数来展示它们的内容.然而,简单基础部件的委托可以继承QItemDelegate而不是QAbstractItem

Qt之模型/视图(委托)

# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' from PyQt4.Qt import * from PyQt4.QtGui import * from PyQt4.QtCore import * import sys,os #视图和委托 """ 视图.在 model/view 架构中,视图是数据从模型到最终用户的途径.数据通过视图向用户进行显示. 此时,这种显示方式不必须同模型的存储结构相

Qt之模型/视图(自定义风格)

Qt之模型/视图(自定义风格) 关于自定义风格是针对视图与委托而言的,使用事件与QSS都可以进行处理,今天关于美化的细节讲解一下. 先看下图: 先撇开界面的美观性(萝卜青菜,各有所爱),就现有的这些风格,使用QSS + Qt二维绘图已经绰绰有余了.当然,如何让界面更美观,这个没有什么捷径,我只能说一句:无他,唯手熟尔!基本功搞扎实了,实现起来就会游刃有余...void DetailProgressBar::paint(QPainter *painter, const QStyleOptionVi