PyQt学习随笔:Model/View中视图数据项编辑变动实时获取变动数据的方法
对于Model/View中视图的数据编辑后怎么能实时获取编辑的数据变动位置和变动情况查阅了一些资料,终于基本弄明白必须重写Model的setData方法才能截获。setData方法是视图中各种角色数据发生更新后视图用于更新Model数据的方法,只要重写该方法就可以截获视图对Model数据的修改。
不过网上介绍的思路都是从QAbstractTableModel派生出一个自己的Model类,并实现相关方法,比较复杂。老猿还需要仔细研究这种方法的详细方式及优缺点,相关文章大部分都是基于Qt实现的,懂C++语言的理解后简单修改就能迁移到PyQt实现模式,在这推荐大家阅读CSDN博友cloveses的《PyQt5使用记录之二 —— QTableView实现数据的显示、编辑、删除与添加》,这是基于PyQt介绍的。
不过老猿今天要介绍的是一种更简单的方式,那就是从PyQt已经实现的从QAbstractTableModel派生的类QStandardItemModel来派生子类,这种方式更简单,只需要重写setData方法就可以了。
步骤如下:
一、从QStandardItemModel派生子类并重写setData方法
class UpdateItemModel(QStandardItemModel):
def setData(self, index, value, role=Qt.EditRole):
# 编辑后更新模型中的数据 View中编辑后,View会调用这个方法修改Model中的数据
print(f"update {index.row()}行{index.column()}列角色为{role}的数据为:{value},初始数据为{index.data()}")
.......#添加自己的数据处理代码
return super().setData(index, value, role)
二、通过自定义类定义自己的存储对象
在应用中最好是应用窗口构造函数中使用如下语句:
self.tableViewModel = UpdateItemModel()
这样简单两步就实现了View更新数据的截获。
这种方法与直接从QStandardItemModel派生自定义类,当然其他的从QAbstractTableModel派生的类如QStringListModel也可以这样使用来派生自定义类。与从QAbstractTableModel派生自定义类相比该方法的优缺点还需要进一步研究,但它至少提供了一种获取更新数据进行处理的简单实现思路。
![](https://img-blog.csdnimg.cn/20190426190559122.png)
博客地址:https://blog.csdn.net/LaoYuanPython
老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036
相关文章
- 基于希尔伯特变换的光反馈自混合干涉位移实时跟踪测量系统的瞬时相位计算matlab仿真
- 《软件工程(第4版?修订版)》—第1章1.10节实时系统的例子
- Vue--名称案例,监听键盘事件@keyup--实时获取数据-----watch属性方法获取
- 用Flink取代Spark Streaming!知乎实时数仓架构演进
- 用VSCode连接远程Linux服务器实时修改代码的方法
- 《Storm实时数据处理》一1.1 简介
- 《软件建模与设计: UML、用例、模式和软件体系结构》一一1.10 并发、分布式和实时设计方法
- 《Linux嵌入式实时应用开发实战(原书第3版)》——2.5 安装过程
- 《Linux嵌入式实时应用开发实战(原书第3版)》——3.2 Linux属性
- IM消息送达保证机制实现(一):保证在线实时消息的可靠投递
- 外设驱动库开发笔记29:DS17887实时时钟驱动
- 八成家用摄像头存安全缺陷 黑客可查看实时画面
- 实时查看日志文件更新的方法
- 浅析Web实时通信的方法总结:短轮询/长轮询/SSE/Websocket的介绍及性能和兼容性对比、SSE的工作原理及如何实现
- 实时沟通——网络电话有多少可能?
- Storm实时计算系统
- 大数据InternetLiveStat获A轮融资,实时发布全球互联网统计