MCV模式学习-0

  • 目的
    • item-based模式
  • 0.0 QStringListModel
  • 0.1 QAbstractListModel
  • 0.2

目的

之前的PyQt采用的是item based形式,如果多个界面要同时使用一组data,在item based情况下,如果数据较少的话,可以用signal和slot的方法解决,但是当data越来越多,界面越来越复杂的情况下,signal和slot会十分杂乱,不便于维护,这种方法肯定是不可取的。

item-based模式

from PyQt5.Qt import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *# TODO: =================这是一般的widget模型,item-based==========================
# TODO: 数据不能同步更新
# TODO: 在item based的情况下,我们勉强可以使用signal和slot的方法解决数据同步的问题
# TODO: 但是当数据量很多的情况下,这种方法显然是不可取的class Main(QWidget):def __init__(self):super(Main, self).__init__()self.setFixedSize(900,600)data = ['one','tow','three','four','five']list = QListWidget(self)list.addItems(data)if __name__ == '__main__':import sysapp = QApplication(sys.argv)data = ['one', 'tow', 'three', 'four', 'five']list = QListWidget()list.addItems(data)list.show()count = list.count()for i in range(count):item = list.item(i)item.setFlags(item.flags() | Qt.ItemIsEditable)combobox = QComboBox()combobox.show()combobox.addItems(data)sys.exit(app.exec_())

学习MCV的模式,目的是解决当前数据采集系统开发过程中,多个界面之间的数据同步更新问题,本节笔记采用如下模式:
DATA-----MODEL-----VIEW

0.0 QStringListModel

data------QStringListModel-----View(QListView/QCombobox)
建立两个listview和combobox,修改其中一项的话,另外两个窗口中的数据也同步更新

from PyQt5.Qt import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *if __name__ == '__main__':import sysapp = QApplication(sys.argv)data = ['one', 'two', 'three', 'four', 'five']list = QListView()list.show()model = QStringListModel(data)# bindlist.setModel(model)combobox = QComboBox()combobox.setModel(model)combobox.show()list_2 = QListView()list_2.setModel(model)list_2.show()sys.exit(app.exec_())

0.1 QAbstractListModel

首先建立一个model类PaletteListModel,继承自QAbstractListModel

QAbstractListModel继承自QAbstractItemModel

继承QAbstractListModel后,为了使PaletteListModel能够正常使用,还需要implement两个methods——data和rowCount

from PyQt5.Qt import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *# 这里弄了一个constructor
class PalettleListModel(QAbstractListModel):def __init__(self, colors = [], parent =None):# superclassQAbstractListModel.__init__(self,parent)self.__colors = colorsdef rowCount(self, parent=None, *args, **kwargs):# 抽象的一个data总量# 应该返回的是抽象数据的长度return len(self.__colors)def data(self, QModelIndex, role=None):# 返回抽象数据的indexif role == Qt.DisplayRole:return "HARDCOOED ITEMS"if __name__ == '__main__':import sysapp = QApplication(sys.argv)list = QListView()list.show()tree = QTreeView()tree.show()combobox = QComboBox()combobox.show()table = QTableView()table.show()red = QColor(255,0,0)green = QColor(0,255,0)blue = QColor(0,0,255)model = PalettleListModel(colors=[red,green,blue])list.setModel(model)tree.setModel(model)combobox.setModel(model)table.setModel(model)
# TODO: ============================================# 每个model都需要implement两个methods# 即data和row countsys.exit(app.exec_())

0.2

修改data方法,使其与data(这里是self.__colors)建立连接
这里用到Qt的以下几个Role:

  • Qt.ToolTipRole
  • Qt.DecorationRole
  • Qt.DisplayRole

[未完待续] — 20190219

[PyQt] MCV模式学习-0相关推荐

  1. OAuth2.0授权码模式学习

    OAuth2.0授权码模式学习 四种授权方式 1,授权码模式 2,简化模式 3,密码模式 4,客户端模式 授权码模式 四种授权模式中最完成,最严密的授权. (1)用户访问客户端,后者将前者导入认证服务 ...

  2. Android 8.0 学习(21)---Oreo的画中画模式学习

    Android 8.0 Oreo的画中画模式学习 本文主要是对谷歌开发者官方微信公众号发布的Android 8.0 Oreo 画中画模式一文的学习记录.  画中画模式Picture-in-pictur ...

  3. Windows保护模式学习笔记(十三)—— PWTPCD

    Windows保护模式学习笔记(十三)-- PWT&PCD 要点回顾 CPU缓存 CPU缓存与TLB的区别 PWT(Page Write Through) PCD(Page Cache Dis ...

  4. Windows保护模式学习笔记(十二)—— 控制寄存器

    Windows保护模式学习笔记(十二)-- 控制寄存器 控制寄存器 Cr0寄存器 Cr2寄存器 Cr4寄存器 控制寄存器 描述: 控制寄存器有五个,分别是:Cr0 Cr1 Cr2 Cr3 Cr4 Cr ...

  5. Windows保护模式学习笔记(十)—— TLB

    Windows保护模式学习笔记(十)-- TLB 地址解析 10-10-12分页 2-9-9-12分页 TLB TLB结构 TLB种类 练习1:体验TLB的存在 第一步:运行代码 第二步:设置中断门描 ...

  6. Windows保护模式学习笔记(九)—— 2-9-9-12分页

    Windows保护模式学习笔记(九)-- 2-9-9-12分页 要点回顾 10-10-12分页 原理 环境配置 2-9-9-12分页 原理 PDPTE PDE PTE XD/NX标志位 环境配置 实验 ...

  7. Windows保护模式学习笔记(七)—— PDEPTE

    Windows保护模式学习笔记(七)-- PDE&PTE Cr3 PDE(页目录表项) PTE(页表项) 物理页的属性 10-10-12分页的补充 实验1:证明PTE的特征1 第一步:选择一个 ...

  8. Windows保护模式学习笔记(六)—— 10-10-12分页

    Windows保护模式学习笔记(六)-- 10-10-12分页 基本概念 4GB内存空间 有效地址-线性地址-物理地址 有效地址与线性地址 物理地址 控制寄存器:Cr3 10-10-12分页 实验:通 ...

  9. Windows保护模式学习笔记(五)—— 任务段任务门

    Windows保护模式学习笔记(五)-- 任务段&任务门 要点回顾 任务段 TSS (Task-state segment ) TR段寄存器 TR段寄存器的读写 TSS段描述符 实验:加载自定 ...

最新文章

  1. JavaScript中this关键字使用方法详解
  2. matlab fsolve()函数的使用
  3. SpringMVC学习(三)——SpringMVC+Slf4j+Log4j+Logback日志集成实战分享
  4. linux下的c编程
  5. python函数调用的一般形式_Python的函数的定义与使用示例
  6. Kinect2.0获取数据
  7. asp 生成html文件,将指定的asp文件内容生成html文件_asp技巧
  8. NetBeans 时事通讯(刊号 # 74 - Sep 30, 2009)
  9. Android 六大布局之 LinearLayout( 线性布局)
  10. Win7-64位 Cygwin编译Redis
  11. 如何选择合适的离心机,有哪些重要参数——TFN FUP LB6CM 落地式低速大容量冷冻离心机
  12. source的作用详细讲解
  13. python编程竞赛规则_第十一届蓝桥杯Python规则及样题
  14. 波哥大BRT带来的启示
  15. HTML粒子漩涡特效,使用HTML5 Canvas绘制经典漩涡粒子特效
  16. Html5的废弃与新增全局属性及元素
  17. 如何使用 RenderScript实现抖音的黑金效果
  18. 算力进阶,谁主沉浮?
  19. [RN] React Native 使用精美图标库react-native-vector-icons
  20. 华云大咖说 | 一体机+云终端模式,何以打造媲美PC的桌面云极致体验?

热门文章

  1. 经典算法 之 子数组换位问题
  2. 暑假假期训练总结-26
  3. 华为q1设置虚拟服务器,华为路由Q1的上网设置教程
  4. 百度云和ai开放平台关系_集成平台即服务,云和……独角兽
  5. QQ收藏支持HTML,手机qq收藏夹的内容怎么复制
  6. Linux下查找结构体定义的位置
  7. android textview表情,android如何在textview或edittext上添加表情
  8. 如何从零开始系统学习量化交易-附资料
  9. JDK新特性-LocalDateTime
  10. android adb 分析,android adb shell常用脚本分析课件.ppt