Pyqt Model/view框架 3.可编辑项
2012-04-23 01:25
225 查看
>[上篇](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的编辑模式
可编辑单元项
---
在[上篇](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的编辑模式
相关文章推荐
- Pyqt Model/view框架 4.自定义编辑项
- pyqt model/view框架 1.第一个model
- Pyqt Model/view框架 5.排序与过滤
- 在MVVMLight框架的ViewModel中实现NavigationService
- CodeIgniter框架模型(model),视图(view)和控制器(controller)中的文件操作
- SpringMVC框架中ModelAndView、Model、ModelMap的区别与使用
- Qt 之 使用 Model-View(模型视图框架)动态的加载显示数据
- 一步一步重写 CodeIgniter 框架 (7) —— Controller执行时将 Model获得的数据传入View中,实现MVC
- mvvm框架下页面与ViewModel的各种参数传递方式
- 在Qt的Model/View框架中实现Drag-Drop操作
- MVVM(Model-View-ViewModel)框架——avalon。
- QSqltablemodel + tableview 用委托 显示图片 PyQt5
- CodeIgniter框架模型(model),视图(view)和控制器(controller)中的文件操作
- 13.1 Model/View框架总体架构
- Model/View框架总体架构
- Qt Model View 框架
- 一个共通的viewModel搞定所有的编辑页面-经典ERP录入页面(easyui + knockoutjs + mvc4.0)
- 基于WPF系统框架设计(7)-TextBox/PasswordBox在ViewModel中支持回车命令
- Qt:Drag-Drop操作在QGraphicsView及Model/View框架下的实现
- 一个共通的viewModel搞定所有的编辑页面