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 ...
随机推荐
- 【转载自i春秋】图片马合成方法
1.将图片和一句话木马放在同一个文件夹 2.创建快捷方式,将起始位置修改为图片和txt文本的路径. 3.进行合成,命令如下 copy .png /b + .txt /a .png 4.成功!自行测试. ...
- Spring3 MVC 之 Hello Word
开发工具: MyEclipse 10.0 项目目录: [http://www.cnblogs.com/rhythmK/] 1.新建项目:File->New->Web Project 项 ...
- Android Studio新手全然指引
Android Studio新手全然指引 @author ASCE1885的 Github 简书 微博 CSDN Android Studio的下载及安装 假设你的电脑能够FQ,那么请直接到Andro ...
- [置顶] IOS7状态栏StatusBar官方标准适配方法
IOS7状态栏StatusBar官方标准适配方法 hello,大家好,ios7正式版已经发布,相信大家都在以各种方式来适配ios7. 如果你已经下载了xcode5,正准备使用,你会发现各种布局的改变. ...
- [Angular 2] WebStorm - Managing Imports
Some tips for import libaray by using webstorm: // Alt + Enter --> Auto Import // Ctrl + Alt + o ...
- C++11 多线程 教学(2)
C++11开始支持多线程编程,之前多线程编程都需要系统的支持,在不同的系统下创建线程需要不同的API如pthread_create(),Createthread(),beginthread()等, ...
- WebSphere性能优化的几个方法
1.更改http server的配置文件参数KeepAlive. 原因:这个值说明是否保持客户与HTTP SERVER的连接,如果设置为ON,则请求数到达MaxKeepAliveRequest ...
- Ubuntu中设置静态IP和DNS(转载)
原文地址:http://blog.sina.com.cn/s/blog_669421480102v3bb.html VMware 中使用网络,对虚拟机设置静态IP:在Ubuntu中设置静态IP共两步: ...
- HTML与CSS入门——第八章 使用外部和内部链接
知识点: 1.链接锚的使用方法 2.在自己的网站上的页面之间链接的方法 3.链接到外部内容的方法 4.链接到一个E-mail地址的方法 5.在新浏览器窗口中查看链接的方法 6.用CSS为链接添加样式的 ...
- Code First 数据注释--DatabaseGenerated
EF中可以使用DatabaseGenerated设置数据库字段的属性,它有三个枚举值:Computed.None.Identity Computed 表示这一列是计算所得 None 不做处理 Iden ...