Model/View架构中的Model模型Model与数据源通信,为体系结构中的其他组件提供数据接口。与数据源通信的方式取决于数据源的类型(如文件、数据库、消息等)以及模型的实现方式。由于模型中的数据都是以项(item)为单位进行管理,所以Model模型又称为项模型(item models )。

所有项模型(item models )类都是从基类QAbstractItemModel 类及其子类派生的,QAbstractItemModel 类定义了一个供视图views 和代理delegates 访问数据的接口。数据本身不必存储在模型中,它可以保存在由单独的类、文件、数据库或其他应用程序组件提供的数据结构或存储库中。

QAbstractItemModel 提供了一个数据接口,该接口足够灵活地处理以列表、表和树的形式展现数据的视图。下图是三种模型对应数据层级示意:

然而,当为列表和类似表的数据结构实现新模型时,QAbstractListModel和QAbstractTableModel类是更好的起点,因为它们提供了公共函数的适当默认实现。这些类中的每一个都可以被子类化,以提供支持特殊类型列表或表的模型。

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

  • QStringListModel用于存储QString项的简单列表。
  • QStandardItemModel管理更复杂的项树结构,每个项都可以包含任意数据。
  • QFileSystemModel提供有关本地文件系统中的文件和目录的信息。
  • QSqlQueryModel、QSqlTableModel和QSqlRelationalTableModel用于使用Model/View对应约定协议实现数据库访问。

如果这些标准模型不满足应用的需求,可以将QAbstractItemModel 、QAbstractListModel或QAbstractTableModel子类化,以创建自定义模型。

老猿Python,跟老猿学Python!

PyQt(Python+Qt)学习随笔:Model/View架构中的Model模型概念的更多相关文章

  1. PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dragDropOverwriteMode属性不能覆盖写的问题

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在<PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dra ...

  2. PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dragDropOverwriteMode属性

    老猿Python博文目录 老猿Python博客地址 一.属性的作用 dragDropOverwriteMode属性用于控制视图的拖放行为,如果其值为True,则视图中选定的数据将在拖拽数据放下时被覆盖 ...

  3. PyQt(Python+Qt)学习随笔:QAbstractItemView的dragEnabled属性的困惑

    老猿Python博文目录 老猿Python博客地址 dragEnabled属性用于控制视图是否支持拖拽,可以通过dragEnabled().setDragEnabled(bool enable)进行属 ...

  4. PyQt(Python+Qt)学习随笔:QAbstractItemView的selectionMode属性

    老猿Python博文目录 老猿Python博客地址 一.概述 selectionMode属性用于控制view中操作选择数据项的模式,用于控制用户是否可以选择一个或多个数据项,以及在多个数据项选择中,选 ...

  5. PyQt(Python+Qt)学习随笔:利用QWidget部件的palette以及ColorGroup、colorRole局部调整部件的特定范围颜色

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 在<PyQt(Python+Qt)学习随笔:QWidget部件的 ...

  6. PyQt(Python+Qt)学习随笔:视图中的dragDropMode属性对dragEnabled和acceptDrops属性的影响

    老猿Python博文目录 老猿Python博客地址 在<PyQt(Python+Qt)学习随笔:QAbstractItemView的dragEnabled和dragDropMode属性的关系&g ...

  7. PyQt(Python+Qt)学习随笔:QAbstractItemView的dragEnabled和dragDropMode属性的关系

    老猿Python博文目录 老猿Python博客地址 在<PyQt(Python+Qt)学习随笔:QAbstractItemView的dragEnabled属性的困惑>中,老猿觉得dragE ...

  8. PyQt(Python+Qt)学习随笔:视图中的拖放操作注意事项

    老猿Python博文目录 老猿Python博客地址 在通过PyQt构建的图形界面中进行拖放,要成功进行拖放需要注意: 视图相关属性需要支持拖放,具体相关属性请参考<PyQt(Python+Qt) ...

  9. PyQt(Python+Qt)学习随笔:Qt Designer中部件的autoFillBackground属性

    autoFillBackground属性可以确认部件背景是否自动填充,如果自动填充,Qt会在调用Paint事件之前填充部件的背景.使用的颜色由部件调色板中的QPalette.window 角色定义(关 ...

随机推荐

  1. Hangfire只允许同时运行同一个任务

    Hangfire有个机制可以确保所有任务都会被执行,如果当服务器停机了一段时间重新启动时,在此期间的周期任务会几乎同时执行.而大部分时候,我们希望同个周期任务每段时间只运行一个就行了. 或者是如果周期 ...

  2. 什么是4G模块 4G模块的工作原理及特点

    什么是4G模块 4G模块,也被叫做4G通信模块或4G DTU模块,他是物联网行业具有4G通信功能的一种产品,通过4G模块,我们可以实现工业设备数据通过无线4G网络传输到远端控制中心,并从控制中心通过4 ...

  3. Redis缓存穿透和雪崩

    缓存穿透 用户想要查询一个数据 在redis缓存数据库中没有获取到 就会向后端的数据库中查询. 当用户很多 都去访问后端数据库的话,这就会给数据库带来很大的压力. 常见场景:秒杀活动 等 解决方法: ...

  4. tcp输入数据 慢速路径处理 tcp_data_queue_ofo

    tcp_data_queue_ofo 在新内核的实现中ofo队列实际上是一颗红黑树.在tcp_data_queue_ofo中根据序号,查找到合适位置,合并或者添加到rbtree中.同时设置dsack和 ...

  5. 2018.1.15复习_ css+js

    [1]几个常见的css标签:--------------------------------------------------background-color; 设置背景颜色background-p ...

  6. Xpath定位元素-一个例子

    前几天在群里面解决的问题,记录下来和大家分享 需要定位这个股份制企业 方法: # 首先需要单击下拉框弹出企业性质的下拉选项:然后用过Xpath定位元素 driver.find.element_by_c ...

  7. CentOS 7 静态IP配置

    CentOS 7 网络配置还有一个有趣的现象,我们都习惯使用 ifconfig 命令查看自己的网络信息和IP地址,但是在 CentOS 7 是无法执行的,如下图所示: 原因是 CentOS 7 使用 ...

  8. RedisEclipse

    1.Eclipse配置 2.HelloWorld import redis.clients.jedis.Jedis; public class TestPing { public static voi ...

  9. Mac 安装并破解热部署插件JRebel详细教程

    热部署插件 JRebel 非常高效的解决了在IDEA中对 Java 代码修改重启Tomcat的效率问题,这样大大降低了项目开发的时间,不用重启即可重新编译修改过的Java代码! (1)IDEA中安装热 ...

  10. oss文件上传删除(批量删除)处理

    博主用的是阿里云的oss 首先先在阿里云下载安装sdk,相关的sdk下载请自行到阿里云下载 文档地址   https://help.aliyun.com/document_detail/85580.h ...