# -*- coding: utf-8 -*-

# python:2.x

#QFileSystemModel

"""

Qt  内置了两种模型:QStandardItemModel 和

QFileSystemModel 。QStandardItemModel 是一种多用途的模型,能够让列表、表格、

树等视图显示不同的数据结构。这种模型会将数据保存起来。试想一下, 列表和表格所要求

的数据结构肯定是不一样的:前者是一维的,后者是二维的。因此,模型需要保存有实际数

据,当视图是列表时,以一维的形式提供数据;当视图是表格时,以二维的形式提供数据。

QFileSystemModel 则是另外一种方式。它的作用是维护一个目录的信息。因此,它不需

要保存数据本身,而是保存这些在本地文件系统中的实际数据的一个索引。我们可以利用

QFileSystemModel 显示文件系统的信息、甚至通过模型来修改文件系统

"""

#QFileSystemModel会把根目录路径设置为当前目录QFileSystemModel 完全将所能想到的东西——名称、大小、类型、修改时间等全部显示出来,可见其强大之处

__author__ = 'Administrator'

#如果你要立即刷新结果,需要通知QFileSystemWatcher 类。

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):

self.model=QFileSystemModel()

self.model.setRootPath(QDir.currentPath())

self.treeview=QTreeView(self)

self.treeview.setModel(self.model)

self.treeview.setRootIndex(self.model.index(QDir.currentPath()))

mkdirpubutton=QPushButton('mkdir',self)

self.rmbutton=QPushButton('rmbu',self)

self.buttonlayout=QVBoxLayout()

self.buttonlayout.addWidget(mkdirpubutton)

self.buttonlayout.addWidget(self.rmbutton)

layout=QVBoxLayout()

layout.addWidget(self.treeview)

layout.addLayout(self.buttonlayout)

self.setLayout(layout)

self.setWindowTitle("File System Model")

mkdirpubutton.clicked.connect(self.mkdir)

self.rmbutton.clicked.connect(self.rm)

def rm(self):

index=self.treeview.currentIndex()

if not index.isValid():#判断是没有目录被选择的

return

ok=False

if self.model.fileInfo(index).isDir():#目录和文件的删除不是一个函数,需要调用 isDir()函数检测

ok=self.model.rmdir(index)

else:

ok=self.model.remove(index)

if not ok:

QMessageBox.information(self,'remove',self.tr('remove%1').arg(self.model.fileName(index)))

def mkdir(self):

index=self.treeview.currentIndex()

if not index.isValid():#判断是没有目录被选择的

return

ok,dirname=QInputDialog.getText(self,'create dir','dir name')

print dir(ok)

if not ok.isEmpty():

if not self.model.mkdir(index,ok).isValid():

QMessageBox.information(self,'create','the dir')

def main():

app = QtGui.QApplication(sys.argv)

ex =Painterd()

ex.show()

sys.exit(app.exec_())

if __name__ == '__main__':

main()

如图:

#更多请看:http://devbean.blog.51cto.com/448512/265658/

qt model/view 架构自定义模型之QFileSystemModel的更多相关文章

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

    # -*- coding: utf-8 -*- # python:2.x #QStringListModel #QStringListModel 是最简单的模型类,具备向视图提供字符串数据的能力. # ...

  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. python入门第一天,循环与判断

    学习一门新的语言最重要的就是练习. 一.脚本需求: 编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 二.脚本流程图: 写代码之前画个流程图总是好的,可以让你理清思路,避免写着写着 ...

  2. python高级编程:有用的设计模式2

    # -*- coding: utf-8 -*- __author__ = 'Administrator' #python高级编程:有用的设计模式 #代理 """ 代理对一 ...

  3. windows下批量杀死进程

    有时候因为病毒或其它原因,启动了一系列的进程,而且有时杀了这个,又多了那个.使用命令taskkill可将这些进程一下子所有杀光: C:\Users\NR>taskkill /F /im fron ...

  4. [Regular Expressions] Find Repeated Patterns

    Regular Expression Quantifiers allow us to identify a repeating sequence of characters of minimum an ...

  5. 常用的50条linux 命令

    从今天起,咱开始正式学习python了,于是遍整理了50条linux的常用命令. 1 线上查询帮助命令 :man   遇到什么不会的命令可以 man +你想要查询的命令 (需要有网),因为是英文的所以 ...

  6. HTML5 prefetch即预加载

    原文地址 声明:此文带着自己的理解,不完全按原文翻译 prefetch 即预加载,在用户需要前我们就将所需的资源加载完毕. 有了浏览器缓存,为何还需要预加载? 用户可能是第一次访问网站,此时还无缓存 ...

  7. Chinese_PRC_CI_AS and SQL_Latin1_General_CP1_CI_AS类型错误

    在编写存储过程时,经常会用到临时表,而且往往会使用临时表与正式表相关联. 当临时表与正式表关联的字段是字符类型的时候,因为临时表创建的字符类型会默认数据库的编码,而正式表的字符编码可能不同,那么这个时 ...

  8. puppet 4.4 System Requirements

    puppet是linux下自动部署管理工具,有apply,agent/server两种模式,安装后默认为agent/server模式. apply模式下,每台机器均有自己的catalog文件,如果需要 ...

  9. 服务器安装VMware ESXI5.5

    一.VMware ESXI5.5 vSphere5.5 VIMSetup下载http://blog.sina.com.cn/s/blog_61c07ac50101gy64.html(1)VMware安 ...

  10. Js得到radiobuttonlist选中值,设置默认值

    JS 代码 var vRbtid=document.getElementById("rbtid");      //得到所有radio      var vRbtidList= v ...