# -*- 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的更多相关文章

  1. qt model/view 架构自定义模型之QFileSystemModel

    # -*- coding: utf-8 -*- # python:2.x #QFileSystemModel """ Qt  内置了两种模型:QStandardItemM ...

  2. qt model/view 架构基础介绍之QListWidget

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' from PyQt4.QtGui import  * from Py ...

  3. qt model/view 架构基础介绍之QTableWidget

    # -*- coding: utf-8 -*- # python:2.x #说明:QTreeWidget用于展示树型结构,也就是层次结构同前面说的 QListWidget 类似,这个类需要同另外一个辅 ...

  4. qt model/view 架构基础介绍之QTreeWidget

    # -*- coding: utf-8 -*- # python:2.x #说明:QTreeWidget用于展示树型结构,也就是层次结构同前面说的 QListWidget 类似,这个类需要同另外一个辅 ...

  5. 第15.22节 PyQt(Python+Qt)入门学习:Model/View架构详解

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.简介 在PyQt和Qt中,Model/View架构是图形界面开发时用于管理数据和界面展现方式的关 ...

  6. PyQt(Python+Qt)学习随笔:Model/View架构中的Model模型概念

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 Model/View架构中的Model模型Model与数据源通信,为体系结构中的其他组件提供数据接口 ...

  7. Qt 学习之路 2(41):model/view 架构

    Qt 学习之路 2(41):model/view 架构 豆子 2013年1月23日 Qt 学习之路 2 50条评论 有时,我们的系统需要显示大量数据,比如从数据库中读取数据,以自己的方式显示在自己的应 ...

  8. 第15.23节 PyQt(Python+Qt)入门学习:Model/View架构中QListView视图配套Model的开发使用

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 QListView理论上可以和所有QAbstractItemModel派生的类如QStri ...

  9. PyQt(Python+Qt)学习随笔:Model/View架构概述

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 模型-视图-控制器(Model-View-Controller,简称MVC)是一种源于Sm ...

随机推荐

  1. HttpServletRequest对象方法的用法(转)

    原文地址:http://blog.csdn.net/xh16319/article/details/8450715 原文作者:ITSTAR 文章太赞,忍不住就想转..... 1. 获得客户机信息    ...

  2. WebView使用

    WebView是View的一个子类,可以让你在activity中显示网页. 可以在布局文件中写入WebView:比如下面这个写了一个填满整个屏幕的WebView: <?xml version=& ...

  3. windows下体验Redis

    Redis 是一个高性能的key-value数据库, 使用内存作为主存储,数据访问速度非常快,当然它也提供了两种机制支持数据持久化存储.比较遗憾的是,Redis项目不直接支持Windows,Windo ...

  4. line-hight-(行高)解析

    行高定义:line-height属性是指文本行基线之间的距离. 顶线.中线.基线.底线概念 从上到下四条线分别是顶线.中线.基线.底线,很像才学英语字母时的四线三格,我们知道vertical-alig ...

  5. SqlCommand和SqlDataAdapter有什么区别

    因为DataSet是离线的,所以SqlDataAdapter这个对象是连接DataSet和数据库的桥梁,所有对DataSet的操作(填充,更新等)都要通过他 ado.net数据访问有两种方式: 1.离 ...

  6. 解决linux下oracle进入sqlplus环境中后退键显示^H、上下键无效与ctrl+l无法清屏等问题【weber出品必属精品】

    习惯linux中上下键回退历史输入的人们肯定也希望sqlplus中也能实现相同的效果,可是不幸的是,sqlplus中不提供诸多方便的快捷键,这个时候我们就需要另外安装一个插件来实现这个想法. 这个插件 ...

  7. Java的一点内容(2)

    1 面向对象的三个原则 封装性 封装的基本单元是类(class),类是一个抽象的逻辑结构,而类的对象是一个真实的物理实体:类的目的是封装复杂性,在类内部存在隐藏实现复杂性机制: 封装(encapsul ...

  8. 关于extern对变量的使用

    extern 是声明全局的变量的意思. 例如在一个工程中有两个cpp,一个是test.cpp一个是main.cpp . 我们在test.cpp中定义了一个int num;但是我们在main.cpp中想 ...

  9. C++Primer笔记(2)

    大型程序一般都是分为多个模块,由多人协作来进行开发的,其中还不可避免的会用到库.而各个模块代码以及库中会定义大量变量,而大量变量的命名,不可避免的会遇见“重名”的问题.“重名”的情况我们称之为命名空间 ...

  10. ASP.NET学习笔记——ASP.NET应用程序

    0 剖析ASP.NET应用程序 用户运行ASP.NET应用程序,不是直接运行,而是使用浏览器(比如IE)通过HTTP请求一个特定的URL(如http://www.mysite.com/mypage.a ...