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

# python:2.x

__author__ = 'Administrator'

from PyQt4.Qt import *

from PyQt4.QtGui import *

from PyQt4.QtCore import *

import sys,os

"""

模型进行自定义:

QSortFilterProxyModel 获

得一些可能必须自定义才能达到的效果。QSortFilterProxyModel 并不能单独使用。顾名

思义,它是一个“代理”,其真正的数据需要另外的一个模型提供。它的作用是对数据进行排

序和过滤。排序很好理解,而过滤,则是按照输入的内容对数据及进行筛选,很像  Excel  里

面的过滤器。不过  Qt  提供的过滤功能是基于正则表达式的,功能很强大。

"""

class SysTem(QWidget):#  Qt  预定义的所有颜色的名字(利用 QColor::colorNames()获取)。然后是 QSortFilterProxyModel 对象

def __init__(self,parent=None):#初始化

super(SysTem,self).__init__(parent)

model=QStringListModel(QColor.colorNames(),self)

self.modelProxy=QSortFilterProxyModel(self)

self.modelProxy.setSourceModel(model)

self.modelProxy.setFilterKeyColumn(0)#然后将FilterKeyColumn 设置为  0,也就是仅仅对第一列进行过滤。

view=QListView(self)

view.setModel(self.modelProxy)

fileterInput=QLineEdit()

filterLayout=QLabel('filter')

filta=QHBoxLayout()

filta.addWidget(filterLayout)

filta.addWidget(fileterInput)

self.syntaxBox=QComboBox()

self.syntaxBox.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Preferred)

self.syntaxBox.addItem('Regular expression',QRegExp.RegExp)

self.syntaxBox.addItem('Wildcard',QRegExp.Wildcard)

self.syntaxBox.addItem('Fixed string',QRegExp.FixedString)

syntaxLabel=QLabel('syntaxLabel')

sysaxLayout=QHBoxLayout()

sysaxLayout.addWidget(syntaxLabel)

sysaxLayout.addWidget(self.syntaxBox)

layout=QVBoxLayout(self)

layout.addWidget(view)

layout.addLayout(filta)

layout.addLayout(sysaxLayout)

fileterInput.textChanged.connect(self.filterChanged)

def filterChanged(self,text):

syntax = QRegExp.PatternSyntax(self.syntaxBox.itemData(self.syntaxBox.currentIndex()).toString())

regex=QRegExp(text,Qt.CaseInsensitive,syntax)

self.modelProxy.setFilterRegExp(regex)

app=QApplication(sys.argv)

system=SysTem()

system.show()

sys.exit(app.exec_())

如图:

qt QSortFilterProxyModel的更多相关文章

  1. Qt QSortFilterProxyModel示例代码, 使用方法

    1. QSortFilterProxyModel不能单独使用,它只是一个"代理",真正的数据需要另外的一个model提供,而且它是用来排序和过滤的. 2. 实现代码 #ifndef ...

  2. Qt之QHeaderView自定义排序(QSortFilterProxyModel)

    简述 对以上节的排序,我们衍伸了两点: 把一个字符串前面的数据按照字符串比较,而后面的数据按照整形比较. 将整形显示为字符串,而排序依然正常呢. 为了分别描述,这里我们先解决问题1. 简述 效果 处理 ...

  3. Qt 学习之路:QSortFilterProxyModel

    从本章开始,我们将逐步了解有关自定义模型的相关内容.尽管前面我们曾经介绍过 Qt 提供的几个内置模型:QStringListModel和QFileSystemModel,但对于千变万化的需求而言,这些 ...

  4. Qt 学习之路 2(48):QSortFilterProxyModel

    Qt 学习之路 2(48):QSortFilterProxyModel 豆子 2013年4月11日 Qt 学习之路 2 6条评论 从本章开始,我们将逐步了解有关自定义模型的相关内容.尽管前面我们曾经介 ...

  5. PyQt(Python+Qt)学习随笔:model/view架构中的排序和代理模型QSortFilterProxyModel

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 在Model/View体系架构中,有两种方法可以进行排序:选择哪种方法取决于底层模型. 如 ...

  6. 用Qt写软件系列五:一个安全防护软件的制作(3)

    引言 上一篇中讲述了工具箱的添加.通过一个水平布局管理器,我们将一系列的工具按钮组合到了一起,完成了工具箱的编写.本文在前面的基础上实现窗体分割效果.堆栈式窗口以及Tab选项卡. 窗体分割 窗体分割是 ...

  7. Qt之QHeaderView自定义排序(终极版)

    简述 本节主要解决自定义排序衍生的第二个问题-将整形显示为字符串,而排序依然正常. 下面我们介绍三种方案: 委托绘制 用户数据 辅助列 很多人也许会有疑虑,平时都用delegate来绘制各种按钮.图标 ...

  8. Qt之QHeaderView排序

    简述 在Windows中我们经常会遇到表头排序,比如可以对文件按照名称.修改日期.类型.大小进行排序,方便我们统一的归类查找. Qt中,我们可以通过点击表头来对QTableView或QTreeView ...

  9. 《Qt 实战一二三》

    简介 "我们来自Qt分享&&交流,我们来自Qt Quick分享&&交流",不管你是笑了,还是笑了,反正我们是认真的.我们就是要找寻一种Hold不住的 ...

随机推荐

  1. #爬虫必备,解析html文档----beautifulsoup的简单用法

    #出处:http://mp.weixin.qq.com/s?__biz=MjM5NzU0MzU0Nw==&mid=201820961&idx=2&sn=b729466f334d ...

  2. 在sae配置django项目

    1:使用sae开发必须有sae帐号,自己注册吧: 2:在sae上新建立一个python项目: 3:建立完成之后新建一个版本,即版本1: 4:获取svn的地址在eclipse中check下来: 5:注意 ...

  3. GridView出现不完整--GridView删除滚动条

    GridView显示不完毕的原因是由于,他的外层也套用了一个滑动的控件,解决办法就是重写GridView,是控制GridView不能滚动,就是写一个类继承GridView  代码例如以下 public ...

  4. ARM体系结构_DAY2

    程序状态寄存器(CPSR) Mode位[4:0]:处理器模式为 USER模式不能直接切换到特权模式,在特权模式下可以直接修改mode位[4:0]为10000,切换到USER模式. T bit位[5]: ...

  5. App版本更新时对SQLite数据库升级或者降级遇到的问题

    SQLite是Android内置的一个很小的关系型数据库.SQLiteOpenHelper是一个用来辅助管理数据库创建和版本升级问题的抽象类.我们可以继承这个抽象类,实现它的一些方法来对数据库进行自定 ...

  6. python - 类的字段

    一.静态字段:保存在类里面 1.创建静态字段: class Foo: CC = 123 # 字段(静态字段),保存在类里 def __init__(self): self.name = 'alex' ...

  7. .net中的特性

    本文来之:http://hi.baidu.com/sanlng/item/afa31eed0a383e0e570f1d3e 在一般的应用中,特性(Attribute,以称为属性)好像被使用的不是很多. ...

  8. Oracle触发器Trigger4触发条件_when的使用

    /* 同一表使用所有条件 Create or replace trigger t5 Before insert,delete,update on 表名 For each row //plsql块 */ ...

  9. windows下给用非exe格式的文件安装网卡驱动

    之前我只知道用驱动精灵来给新机器装网卡驱动,或者用下载好的exe格式文件给非新机器装网卡驱动. 今天下载了一个非exe格式的文件,就不知道怎么装了,百度了一下才知道,可以通过:”设备管理器“-> ...

  10. 安装 adobe flash player

    安装方法:     1. 下载Adobe Flash Player:        http://fpdownload.macromedia.com/get/flashplayer/pdc/11.2. ...