Qt之模型/视图(委托)
# -*- coding: utf-8 -*-
# python:2.x
__author__ = 'Administrator'
from PyQt4.Qt import *
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys,os
#视图和委托
"""
视图。在 model/view 架构中,视图是数据从模型到最终用户的途径。数据通过视图向用户进行显示。
此时,这种显示方式不必须同模型的存储结构相一致。实际上,很多情况下,数据的显示同底层数据的存储是完全不同的。
QAbstractItemModel提供标准的模型接口,使用 QAbstractItemView提供标准的视图接口,当结合这2个,可以对数据表示层分离,在视图中利用前面据说的模型索引,也可以来自模型的数据进行布局既可以直接渲染数据本身,也可以通过委托渲染和编辑数据。
视力不仅可以展示数据,还可以在数据项之间导航以及数据项选择,也需要支持很多基本用户界面的特性,比如:移动,编辑等,也可以把这些数据功能交给某个委托
视图可以脱离模型创建,但必须在显示之前存在,也就是说,视图显示完全基于模型的,这是不能脱离模型存在的,对于用户的选择,视图妈可以独立,也可以共享
-------
有些视图,比如QTableView和QTreeView,不仅显示数据,还会显示列头或者表头,通过QHeaderView视图类提供的实现,表头通常访问视图所包含的同一模型。它们使用QAbstractItemModel::headerData()函数从模型中获取数据,然后将其以标签 label 的形式显示出来。我们可以通过继承QHeaderView类,实现某些更特殊的功能。
"""
class SysTem(QWidget):
def __init__(self,parent=None):#初始化
super(SysTem,self).__init__(parent)#超类
d=QStringList()
d.append('0')
d.append('1')
d.append('2')
m=QStringListModel(self)
m.setStringList(d)
listView=QListView()
listView.setModel(m)
btnshow=QPushButton('show',self)
btnshow.clicked.connect(self.show)
buttonLayout=QHBoxLayout()
buttonLayout.addWidget(btnshow)
layout=QVBoxLayout()
layout.addWidget(listView)
layout.addLayout(buttonLayout)
self.setLayout(layout)
a=SysTem1()
#listView.setItemDelegate(SysTem1(listView))
#增加一个委托
class SysTem1(QStyledItemDelegate):
def __init__(self,parent=None):
self.createEditor()
#self.setEditorData()
#self.setModelData()
#self.updateEditorGeometry()
def createEditor(self,parent=None):#parent 参数会作为新的编辑器的父组件。
editor=QSpinBox(parent)
editor.setMinimum(0)
editor.setMaximum(100)
return editor
def setEditorData(self,editor=None,index=None):#setEditorData()函数从模型中获取需要编辑的数据(具有Qt::EditRole角色)。由于我们知道它就是一个整型,因此可以放心地调用toInt()函数。editor 就是所生成的编辑器实例,我们将其强制转换成QSpinBox实例,设置其数据作为默认值。
value=index.model().date(index,Qt.EditRole).toInt()
spinBox=editor
spinBox.setValue(value)
def setModelData(self,editor=None,model=None,index=None):
spinBox=editor
spinBox.interpretText()
value=spinBox.value()
model.setData(index,value,Qt.EditRole)
"""
委托会调用setModelData()函数将新的数据保存到模型中。因此,在这里我们首先获取QSpinBox实例,得到用户输入值,然后设置到模型相应的位置。标准的QStyledItemDelegate类会在完成编辑时发出closeEditor()信号,视图会保证编辑器已经关闭并且销毁,因此无需对内存进行管理。由于我们的处理很简单,无需在发出closeEditor()信号,但是在复杂的实现中,记得可以在这里发出这个信号。针对数据的任何操作都必须提交给QAbstractItemModel,
这使得委托独立于特定的视图。当然,在真实应用中,我们需要检测用户的输入是否合法,是否能够存入模型。
"""
def updateEditorGeometry(self,editor=None,index=None,option=None):
editor.setGeometry(option.rect)
"""
单将这个输入框的大小设置为单元格的大小(由option.rect提供)。如果是复杂的编辑器,我们需要根据单元格参数(由option提供)、数据(由index提供)结合编辑器(由editor提供)计算编辑器的显示位置和大小。
现在,我们的委托已经编写完毕。接下来需要将这个委托设置为QListView所使用的委托:"
"""
app=QApplication(sys.argv)
system=SysTem()
system.show()
sys.exit(app.exec_())
如图:
这边由于本人不懂(没有学过c++),所有地方请看到的朋友帮下,谢谢
原文是:http://www.devbean.net/2013/03/qt-study-road-2-view-delegate/
求帮c++的朋友帮下,谢谢
Qt之模型/视图(委托)的更多相关文章
- 【转】Qt之模型/视图
[本文转自]http://blog.sina.com.cn/s/blog_a6fb6cc90101hh20.html 作者: 一去丶二三里 关于Qt中MVC的介绍与使用,助手中有一节模型/视图编程 ...
- Qt之模型/视图(自定义风格)
Qt之模型/视图(自定义风格) 关于自定义风格是针对视图与委托而言的,使用事件与QSS都可以进行处理,今天关于美化的细节讲解一下. 先看下图: 先撇开界面的美观性(萝卜青菜,各有所爱),就现有的这些风 ...
- PyQt5模型视图委托
Model-View-Delegate 模型视图委托(MVD)是PyQt中特有的设计模式,类似MVC设计模式,将MVC设计模式中的Controller当做MVD中的Delegate,两者的概念基本相同 ...
- Qt 模型/视图/委托
模型.视图.委托 模型/视图架构基于MVC设计模式发展而来.MVC中,模型(Model)用来表示数据:视图(View)是界面,用来显示数据:控制(Controller)定义界面对用户输入的反应方式. ...
- Qt之模型/视图(委托)
概念 不同于模型 - 视图 - 控制器模式,模型/视图设计不包括用于管理与用户交互的一个完全独立的组件.一般情况,视图负责将模型数据呈现给用户以及处理用户输入.为了输入更加具有灵活性,则由委托来执行交 ...
- Qt之模型/视图(自定义进度条)
简述 在之前的章节中分享过关于QHeaderView表头排序.添加复选框等内容,相信大家模型/视图.自定义风格有了一定的了解,下面我们来分享一个更常用的内容-自定义进度条. 实现方式: 从QAbstr ...
- Qt之模型/视图(实时更新数据)
上两节简单介绍了Qt中对于模型/视图的编程,大部分助手里说的很清楚了,现在就开始实战部分吧! 在实际应用中,视图展示的数据往往并非一成不变的,那么如何实时更新成了一个很重要的问题!功能:(1)添加委托 ...
- QT MVC 模型/视图
1. 模型视图实例一, QFileSystemModel QTreeView ,model/view示例. #include <QApplication> #include <QF ...
- Qt MVC(模型-视图-代理)
实习刚才是一段时间,公司这边就要求熟悉这个mvc.一般开始都是用tableview,前面的blog我都是使用listview居多,并且相对delegate这个使用的多余model.接下来说下model ...
随机推荐
- mybatis 调用mysql存储过程 带输出输入参数
http://lohasle.iteye.com/blog/1669879 存储过程都是一样的,只是根据自己的喜好,可以用MAP或者JAVABEAN传递参数. -- ----------------- ...
- 【计算机视觉】基于行为的ReID演示
帮老师做了一个简单的基于行为(主要是步态)的ReID问题的Demo,效果例如以下图: 以下是提取的集中特征,前三个都是GEI系的,后几个是基于光流场的.然后右边是识别出的几个对象的排序,由于没有角度和 ...
- 查看哪些ip破解你ssh密码以及次数
在互联网中,总有一些无聊的人,每天不断的猜解别人服务器的密码!作为linux服务器的管理员,我们应该了解哪些IP经常不断地扫描我们的SSH端口以尝试暴力破解,下面我们用一条命令简单列出哪些IP破解你S ...
- JS高级程序设计学习笔记之数组
数组创建的方式 var str = new Array();放入数字即为设置数组长度 var str = []; 数组的length可读可写 监测数组 Array.isArray()方法确定某个值是不 ...
- Sass函数--颜色函数--RGB颜色函数
RGB颜色函数-RGB()颜色函数 主要分为 RGB , HSL 和 Opacity 三大函数,当然其还包括一些其他的颜色函数,比如说 adjust-color 和 change-color 等.1. ...
- 私人C#笔记
coust 定义常量 string是密封类,所以不能继承它 namespace默认是按照文件夹的结构命名的,如(System.文件夹.子文件夹),而且namespace是可以手动改的 Arra ...
- Oracle 账户被锁定
哎 每次安装oracle的时候总是忘了将用户解锁,结果就蛋疼了,从网上找到一个简单的解决方案 在CMD命令输出如下: sqlplus /nolog alert user system account ...
- android中细节效果总结
android中细节效果总结 andorid取消最上方的标题同时全屏显示 Source code protected void onCreate(Bundle savedInstanceS ...
- Constructing Roads In JGShining's Kingdom(HDU 1025 LIS nlogn方法)
Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65 ...
- IOS 开发之文件管理
一.iOS中的沙盒机制 iOS应用程序只能对自己创建的文件系统读取文件,这个独立.封闭.安全的空间,叫做沙盒.它一般存放着程序包文件(可执行文件).图片.音频.视频.plist文件.sqlite数据库 ...