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 ...
随机推荐
- 用户控件(.ascx)与<ul><li>以及<a>布局之小结
用户控件(.ascx)与<ul><li>以及<a>布局 小结 一.用户控件(.ascx) 1.aspx是浏览器直接访问的页面,而ascx是用户控件,一般是用来重用. ...
- hdu 4756 Install Air Conditioning
非正规做法,一个一个的暴,减一下枝,还得采用sort,qsort居然过不了…… #include <cstdio> #include <cmath> #include < ...
- [RxJS] Toggle A Stream On And Off With RxJS
This lesson covers how to toggle an observable on and off from another observable by showing how to ...
- c++11 : range-based for loop
0. 形式 for ( declaration : expression ) statement 0.1 根据标准将会扩展成这样的形式: 1 { 2 auto&& __ra ...
- HashSet的分析(转)
一. HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持.它不保证set 的迭代顺序:特别是它不保证该顺序恒久不变.此类允许使用null元素. 二. ...
- 安装oracle11g未找到文件WFMLRSVCApp.ear文件
win7_64位系统,安装oracle11gR2时,报错提示: 未找到文件...WFMLRSVCApp.ear文件 解决方法如下: 将下载的两个压缩包解压至同一目录(合并)再安装即可解决此类问题.
- Some good iOS questions
这里,我列举了一些在Stackoverflow中一些比较好的关于iOS的问题.大部分我列举的问题都是关于Objective C.所有问题中,我比较喜欢“为什么”这一类型的问题. 问题 1. What’ ...
- Android与JS混编(多图选择器)
github: https://github.com/weifengzz/AndroidJSSelectImg
- Windows 不能在 本地计算机 启动 SQL Server(MSSQLSERVER)。错误码126
结合自己的解决方案和网络上搜到的内容,现总结如下: 首先你要知道问题出在了什么地方才能针对性处理. 1.打开事件查看器 计算机右击——管理 右侧会出现错误列表,在其中找到SQL server有关的查看 ...
- FineUI上传文件应用(三)
一.文件上传控件 <x:FileUpload runat="server" ID="file" EmptyText="请选择文件" L ...