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 ...
随机推荐
- 如何安装CocoaPods
转自 http://www.99css.com/1321/ 在 iOS 项目开发中,经常会用到第三方的源代码,CocoaPods 就是为了方便管理这些源码的工具. 在官方教程里面,安装看起来非常简单 ...
- mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
权限问题,授权 给 root 全部sql 权限 mysql> grant all privileges on *.* to root@"%" identified by & ...
- EBS-PAC成本更新事务处理
PAC成本更新事务处理 DECLARE l_itfs_rec mtl_transactions_interface% ROWTYPE; BEGIN --插入接口表 SELECT mt ...
- [RxJS] Stopping a Stream with TakeUntil
Observables often need to be stopped before they are completed. This lesson shows how to use takeUnt ...
- C语言的学习-基础知识点
---BOOL BOOL BOOL a = YES; printf("%d\n", a); a = NO; printf("%d", a); , b = ; B ...
- Java数据结构漫谈-Vector
List除了ArrayList和LinkedList之外,还有一个最常用的就是Vector. Vector在中文的翻译是矢量,向量,所以大家喜欢把Vector叫做矢量数组,或者向量数组. 其实就底层实 ...
- React-nwb的使用
一.查看nwb的版本 nwb -v 二.创建一个react项目 nwb new react-app react-demo 三.启动项目 nwb serve
- unison实时双向数据同步
软件下载 ocamlopt下载地址:http://caml.inria.fr Unison下载地址:http://www.seas.upenn.edu/~bcpierce/unison 1.安装uni ...
- l连接远程桌面
参考:http://www.windows7en.com/Win7/17168.html 重要命令:mstsc
- PHP命名空间(Namespace)的使用详解(转)
对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只 ...