zoukankan      html  css  js  c++  java
  • Pyqt Model/view框架 3.可编辑项

    >[上篇](http://www.cnblogs.com/hangxin1940/archive/2012/12/07/2806449.html)介绍了如何自定义渲染view项,通过这篇,将掌握如何实现view单元项的编辑 可编辑单元项 --- 在[上篇](http://www.cnblogs.com/hangxin1940/archive/2012/12/07/2806449.html)已完成的代码中,为`MyListModel`类加入一下方法: def flags(self, index): """ flag描述了view中数据项的状态信息 """ #首先获取超类的flags返回值 flag=super(MyListModel,self).flags(index) #或运算,将ItemIsEditable(可编辑)标志叠加上去 return flag | Qt.ItemIsEditable 现在运行完整代码,*双击*单元项,就可以编辑它了。 此时我们发现,虽然可以编辑,但是双击后,编辑区域是空,并且编辑完成后,也无任何效果 我们首先解决编辑时数据的显示问题,将以下代码添加到`MyListModel`->`data`方法中,也就是增加一个判断条件: #当前角色为编辑模式,显示原本数据 #这样,当我们双击单元项时,不至于什么都不显示 if role==Qt.EditRole: return self._data[row] 然后,为了保存数据,我们为`MyListModel`类增加如下方法: def setData(self,index,value,role=Qt.EditRole): """ 设置数据 """ #如果当前为编辑角色 if role==Qt.EditRole: #QVariant的这个方法,返回的bool类型表示这个值是否可以被转为int类型 value_int, ok=value.toInt() #如果可以转为int类型 if ok: #保存数据 self._data[index.row()]=value_int #发射数据更改信号,以便让view更新 self.dataChanged.emit(index,index) return True #数据是否成功更新 return False 现在运行代码,可以正常编辑并更新数据了。 进度条根据输入的数值改变 Model处理流程 --- 目前为止,我们可以编写只读、可编辑、自定义单元项的model了,下面是处理流程 Model.flags model item可编辑 | | 创建编辑器 | Model.data 返回编辑状态下的数据 | | 设置编辑器里的数据 | Model.setData 编辑完成,并保存数据 >通过这篇,我们可以编写可编辑的model了,[下篇](http://www.cnblogs.com/hangxin1940/archive/2012/12/07/2806453.html),我们将学会如何用delegate委托渲染model的编辑模式
  • 相关阅读:
    Static Analysis of Java Enterprise Applications: Frameworks and Caches, the Elephants in the Room
    使用gopacket 解析一个简单的sql server 协议
    gopacket 流量抓包golang 包
    pmm 自定义prometheus 配置
    Hasura 即将支持更多的数据库类型
    apache knox apache hdaoop 生态的rest api && 应用网关
    使用minio替换fastdfs 文件系统
    tcpcollect基于libpcap 监听mysql sql
    一种业务延时状态分析的方法
    tcprstat 使用的几个问题
  • 原文地址:https://www.cnblogs.com/hangxin1940/p/2806450.html
Copyright © 2011-2022 走看看