对于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://blog.csdn.net/LaoYuanPython

老猿Python博客文章目录:https://blog.csdn.net/LaoYuanPython/article/details/98245036

PyQt学习随笔:Model/View中视图数据项编辑变动实时获取变动数据的方法的更多相关文章

  1. PyQt学习随笔:重写setData方法截获Model/View中视图数据项编辑的注意事项

    根据<PyQt学习随笔:Model/View中视图数据项编辑变动实时获取变动数据的方法>可以重写从PyQt的Model类继承的setData方法来实时截获View中对数据的更改,但需要注意 ...

  2. PyQt学习随笔:Qt中Model/View中的怎么构造View匹配的Model

    老猿Python博文目录 老猿Python博客地址 在<PyQt学习随笔:Qt中Model/View相关的主要类及继承关系>介绍了Model/View架构的主要类,在实际使用时,view相 ...

  3. PyQt学习随笔:Qt中Model/View中的Model Index

    Qt中Model/View中的Model Index是一个类,该类用于定位Model/View中数据模型中的数据. Model Index是从QAbstractItemModel派生的子类,用于在项视 ...

  4. PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的按钮改变缺省文字的方法

    在Qt Designer中可以预先定义标准按钮,相关支持的标准按钮请见<PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的StandardButton ...

  5. PyQt(Python+Qt)学习随笔:Designer中QDialogButtonBox确认clicked信号是哪个按钮发送的方法

    一.引言 QDialogButtonBox本身只提供4种信号,分别是accepted.rejected.clicked和helpRequested,在<PyQt(Python+Qt)学习随笔:D ...

  6. PyQt(Python+Qt)学习随笔:QTableWidget中表格各列平均分配宽度的两种方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在QTableWidget表格部件中,如果需要实现表格中各列要占满部件中的可用空间,同时实现各列平分 ...

  7. PyQt学习随笔:Qt中Model/View相关的主要类及继承关系

    View相关类类继承关系: Model相关类类继承关系:

  8. PyQt学习随笔:Qt中tem Views(Model-Based)和Item Widgets(Item-Based)控件的用途和关系

    在界面程序开发中,数据的展示主要包括表格.简单列表.树状列表以及纯文本等多种方式,在Qt中将界面表格.简单列表.树状列表称为"表项视图类(item view class)",并提供 ...

  9. PyQt学习随笔:应用中通过installEventFilter安装重写的eventFilter捕获应用事件的方法

    eventFilter函数是直接从QObject继承的定义的事件刷选虚拟函数,如果一个对象A使用installEventFilter函数将另一个对象B安装了B的实例方法eventFilter,则这个对 ...

随机推荐

  1. c++实现split

    #include<iostream> #include<vector> #include<algorithm> #include<string> usi ...

  2. CSP-S 2020 Travels

    CSP-S 2020 Travels DAY 0 I hit the board in the morning before departure The rest of the time is dec ...

  3. C语言设计模式(应用)

    #ifndef QUEUE_H #define QUEUE_H #define QUEUE_SIZE 10 typedef struct queue { int buffer[QUEUE_SIZE]; ...

  4. Linux(centos6.8)配置Mysql环境

    1.下载mysql安装包 https://downloads.mysql.com/archives/community/ 2.查询mysql信息 [1]查询mysql是否已经安装 [root@plut ...

  5. 精尽 MyBatis 源码分析 - 整体架构

    该系列文档是本人在学习 Mybatis 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释(Mybatis源码分析 GitHub 地址.Mybatis-Spring 源码分析 GitHub ...

  6. Java面试那些事

    网址链接:https://mp.weixin.qq.com/s/BkiDwyjua4iwws7gWHwK9Q 引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试 ...

  7. 【网鼎杯2020朱雀组】Web WriteUp

    nmap nmap语法,很简单. 127.0.0.1' -iL /flag -oN vege.txt ' phpweb 打开,抓包,发现可以传递函数和其参数 试了一下很多函数都被过滤了,不能执行系统命 ...

  8. zabbix的搭建及操作(2)监控windows10及网络设备

    实验环境 配置完成的Server端 Web --详情点击 windows10 192.168.10.1 (与虚拟机同一Vmnet的IP地址)必须关闭防火墙 网络设备GNS 192.168.10.50 ...

  9. ABBYY FineReader 15新增智能PDF文档转换功能

    ABBYY FineReader 15(Windows系统)新增智能PDF文档转换功能,可自动检测导入PDF数字文档的文本层质量,确保转变为可编辑格式后的准确结果:从表单字段和文本框中提取文本,准确保 ...

  10. Java8常用的内置函数式接口(一)Predicate、Consumer、Supplier、Function

    Java8常用的内置函数式接口(一) 简介 JDK 1.8 API中包含了很多内置的函数式接口.有些是在以前版本的Java中大家耳熟能详的,例如Comparator接口,或者Runnable接口.对这 ...