qt model/view 架构自定义模型之QStringListModel
# -*- coding: utf-8 -*-
# python:2.x
#QStringListModel
#QStringListModel 是最简单的模型类,具备向视图提供字符串数据的能力。
#QStringListModel 是一个可编辑的模型,可以为组件提供一系列字符串作为数据。
#看作是封装了 QStringList 的模型。QStringList 是一种很常用的数据类型,实际上
#是一个字符串列表(也就是 QList<QString>)。既然是列表,它也就是线性的数据结构,
#因此, QStringListModel 很多时候都会作为 QListView 或者 QComboBox 这种只有一列
#的视图组件的数据模型。
__author__ = 'Administrator'
from PyQt4.QtGui import *
from PyQt4.Qt import *
from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import *
import sys
class Painterd(QWidget):
def __init__(self):
super(Painterd,self).__init__()
self.setFixedSize(300,200)
self.vector()
def vector(self):
tablewidtet=QStringList()
tablewidtet.append('a')
tablewidtet.append('b')
tablewidtet.append('c')
tablewidtet.append('d')
self.model=QStringListModel(self)
self.listView=QListView(self)
self.model.setStringList(tablewidtet)
self.listView.setModel(self.model)
btnLayout=QHBoxLayout()
insertBtn=QPushButton('insert',self)
dels=QPushButton('delete',self)
showbto=QPushButton('show',self)
btnLayout.addWidget(insertBtn)
btnLayout.addWidget(dels)
btnLayout.addWidget(showbto)
mainlayout=QVBoxLayout(self)
mainlayout.addWidget(self.listView)
mainlayout.addLayout(btnLayout)
self.setLayout(mainlayout)
insertBtn.clicked.connect(self.inpits)
dels.clicked.connect(self.dels1)
showbto.clicked.connect(self.edits)
def edits(self):#直接按F2就可以编辑,不用自己实再实现编辑功能
row=self.listView.currentIndex().row()
index=self.model.index(row)
variant=self.model.data(index,Qt.DisplayRole)#获取当前选择项文本
text=variant.toString()
ok,text=QInputDialog.getText(self,u'输入',u'请输入内容?',QLineEdit.Normal,text)#要求用户输入数据
#解释这部分代码:
#首先插入空行,然后选中新插入的空行,设置新的
# 数据。这其实是一种冗余操作,因为 currentIndex()已经获取到当前行。
if ok:
row=self.listView.currentIndex().row()#获取 Q ListView 当前行的项
self.model.insertRows(row,1)
"""
QStringListModel 的
一个重载。参数 1 说明要插入 1 条数据。记得之前我们已经把 row 设置为当前行,因此,
这行语句实际上是在当前的 row 位置插入 count 行,这里的 count 为 1。由于我们没有添
加任何数据,实际效果是,我们在 row 位置插入了 1 个空行。然后我们使用 model 的
index()函数获取当前行的 QModelIndex 对象,利用 setData()函数把我们用 QInputDialog
接受的数据设置为当前行数据。接下来,我们使用 setCurrentIndex()函数,把当前行设为
新插入的一行,并调用 edit()函数,使这一行可以被编辑。
"""
index=self.model.index(row)#QModelIndex类是用于定位数据的数据模型:三个重要的数据:行索引、列索引以及该数据属于哪一个模型,调用其 row()函数获得行索引,该返回值是一个 int,也就是当前是第几行
#bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex());
#count行插入到模型给定的row位置,新行的数据将会作为parent子元素,如果row是0,新行将被插入到parent所有数据之前,否则将在指定的位置数据之前,如果
#parent没有子元素,则会新插入一个单列数据,函数 插入返回成功True,否则False,
self.model.setData(index,text)
self.listView.setCurrentIndex(index)
def dels1(self):
self.model.removeRows(self.listView.currentIndex().row(),1)
def inpits(self):
ok,text=QInputDialog.getText(self,u'输入',u'请输入内容?',QLineEdit.Normal,'')
if ok:
row=self.listView.currentIndex().row()
self.model.insertRows(row,1)
index=self.model.index(row)
self.model.setData(index,text)
self.listView.setCurrentIndex(index)
def main():
app = QtGui.QApplication(sys.argv)
ex =Painterd()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
如图:
#例子原地址:http://www.cnblogs.com/venow/archive/2012/10/17/2728299.html
qt model/view 架构自定义模型之QStringListModel的更多相关文章
- qt model/view 架构自定义模型之QFileSystemModel
# -*- coding: utf-8 -*- # python:2.x #QFileSystemModel """ Qt 内置了两种模型:QStandardItemM ...
- qt model/view 架构基础介绍之QListWidget
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' from PyQt4.QtGui import * from Py ...
- qt model/view 架构基础介绍之QTableWidget
# -*- coding: utf-8 -*- # python:2.x #说明:QTreeWidget用于展示树型结构,也就是层次结构同前面说的 QListWidget 类似,这个类需要同另外一个辅 ...
- qt model/view 架构基础介绍之QTreeWidget
# -*- coding: utf-8 -*- # python:2.x #说明:QTreeWidget用于展示树型结构,也就是层次结构同前面说的 QListWidget 类似,这个类需要同另外一个辅 ...
- 第15.22节 PyQt(Python+Qt)入门学习:Model/View架构详解
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.简介 在PyQt和Qt中,Model/View架构是图形界面开发时用于管理数据和界面展现方式的关 ...
- PyQt(Python+Qt)学习随笔:Model/View架构中的Model模型概念
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 Model/View架构中的Model模型Model与数据源通信,为体系结构中的其他组件提供数据接口 ...
- Qt 学习之路 2(41):model/view 架构
Qt 学习之路 2(41):model/view 架构 豆子 2013年1月23日 Qt 学习之路 2 50条评论 有时,我们的系统需要显示大量数据,比如从数据库中读取数据,以自己的方式显示在自己的应 ...
- 第15.23节 PyQt(Python+Qt)入门学习:Model/View架构中QListView视图配套Model的开发使用
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 QListView理论上可以和所有QAbstractItemModel派生的类如QStri ...
- PyQt(Python+Qt)学习随笔:Model/View架构概述
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 模型-视图-控制器(Model-View-Controller,简称MVC)是一种源于Sm ...
随机推荐
- hadoop集群监控工具ambari安装
Apache Ambari是对Hadoop进行监控.管理和生命周期管理的基于网页的开源项目.它也是一个为Hortonworks数据平台选择管理组建的项目.Ambari支持管理的服务有: Apache ...
- Android中Service类onStartCommand
Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,然后在onStart ...
- flush();close();dispose()
写一个写csv文件的程序,用streamwriter,觉得程序主体是没有问题的,但是一直写不进去,最后发现是因为没有调用flush(). msdn 对streamwriter.flush()的的说明是 ...
- discuzx3.2伪静态
首先,我们要新建一个名为.htaccess的文件,文件名为空白,这点很重要.很多人无法新建这个文件,在这里教大家如何新建没有名字的文件. 新建一个TXT文本,名字先默认.然后打开这个文本,然后把我们的 ...
- excel 下载
public string CreateExcel(string SelectedBizType, string strReportDate, DropDownList ddlYQ, DropDown ...
- [Leetcode] Remove Duplicates From Sorted Array II (C++)
题目: Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For ex ...
- beini系列_2_beini装入虚拟机
- destoon控制标题长度,title中显示全标题 标题字符长度怎么控制?
如题商品调用出来后,标题的字符长度怎么控制?有哪位高手能帮我解决吗? 小弟在此感谢了. &length=30 //30表示30个字节 <!--{tag("moduleid=5& ...
- [FML]学习笔记三 Rademacher Complexity
该章节证明用到的不等式:Hoeffding不等式,McDiarmid不等式以及jensen不等式 Hoeffding's: McDiarmid不等式是Hoeffding不等式的一个推广,用f(S)代替 ...
- pyqt5模块