qt QSortFilterProxyModel
# -*- 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的更多相关文章
- Qt QSortFilterProxyModel示例代码, 使用方法
1. QSortFilterProxyModel不能单独使用,它只是一个"代理",真正的数据需要另外的一个model提供,而且它是用来排序和过滤的. 2. 实现代码 #ifndef ...
- Qt之QHeaderView自定义排序(QSortFilterProxyModel)
简述 对以上节的排序,我们衍伸了两点: 把一个字符串前面的数据按照字符串比较,而后面的数据按照整形比较. 将整形显示为字符串,而排序依然正常呢. 为了分别描述,这里我们先解决问题1. 简述 效果 处理 ...
- Qt 学习之路:QSortFilterProxyModel
从本章开始,我们将逐步了解有关自定义模型的相关内容.尽管前面我们曾经介绍过 Qt 提供的几个内置模型:QStringListModel和QFileSystemModel,但对于千变万化的需求而言,这些 ...
- Qt 学习之路 2(48):QSortFilterProxyModel
Qt 学习之路 2(48):QSortFilterProxyModel 豆子 2013年4月11日 Qt 学习之路 2 6条评论 从本章开始,我们将逐步了解有关自定义模型的相关内容.尽管前面我们曾经介 ...
- PyQt(Python+Qt)学习随笔:model/view架构中的排序和代理模型QSortFilterProxyModel
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.概述 在Model/View体系架构中,有两种方法可以进行排序:选择哪种方法取决于底层模型. 如 ...
- 用Qt写软件系列五:一个安全防护软件的制作(3)
引言 上一篇中讲述了工具箱的添加.通过一个水平布局管理器,我们将一系列的工具按钮组合到了一起,完成了工具箱的编写.本文在前面的基础上实现窗体分割效果.堆栈式窗口以及Tab选项卡. 窗体分割 窗体分割是 ...
- Qt之QHeaderView自定义排序(终极版)
简述 本节主要解决自定义排序衍生的第二个问题-将整形显示为字符串,而排序依然正常. 下面我们介绍三种方案: 委托绘制 用户数据 辅助列 很多人也许会有疑虑,平时都用delegate来绘制各种按钮.图标 ...
- Qt之QHeaderView排序
简述 在Windows中我们经常会遇到表头排序,比如可以对文件按照名称.修改日期.类型.大小进行排序,方便我们统一的归类查找. Qt中,我们可以通过点击表头来对QTableView或QTreeView ...
- 《Qt 实战一二三》
简介 "我们来自Qt分享&&交流,我们来自Qt Quick分享&&交流",不管你是笑了,还是笑了,反正我们是认真的.我们就是要找寻一种Hold不住的 ...
随机推荐
- 用Spring提高java观察者模式灵活性
在上篇博客 用java观察者模式解耦经典三层架构 的最后,用了一个Client类把Listener的实现类注冊到了LoginEventSource类中,假设须要加入�新的逻辑,加入�新的listene ...
- Go程序GC优化经验分享
http://1234n.com/?post/yzsrwa 最近一段时间对<仙侠道>的服务端进行了一系列针对GC的调优,这里跟各位分享一下调优的经验. 游戏第一次上线的时候,大部分精力都投 ...
- 最流行的android组件大全
目录 [−] 工具和教程 UI组件 类库 游戏引擎 Android HTML5应用 Android 是目前最流行的移动操作系统(还需要加之一吗?). 随着新版本的不断发布, Android的功能也日益 ...
- Stm32高级定时器(三)
Stm32高级定时器(三) 1 互补输出和死区插入 1.1 死区:某个处于相对无效状态的时间或空间 本来OCX信号与OCXREF时序同相同步,OCXN信号与OCXREF时序反相同步.但为了安全考虑,以 ...
- jquery之提示信息
//生成优惠券并分发 function saveCouponAssign(){ //发行券种 var couponTypeId = $("#couponTypeId").combo ...
- jquery之null的数组
去掉null的数组 function ClearNullArr(arr) { for (var i = 0; i < arr.length; i++) { if(arr[ ...
- line-hight-(行高)解析
行高定义:line-height属性是指文本行基线之间的距离. 顶线.中线.基线.底线概念 从上到下四条线分别是顶线.中线.基线.底线,很像才学英语字母时的四线三格,我们知道vertical-alig ...
- js获取当前页面的网址域名地址
1.获取当前完整网址thisURL = document.URL;thisHREF = document.location.href;thisSLoc = self.location.href;thi ...
- 分页搜索查询sql
select * from (select t.*,rownum no from " + table + " t where scbj=0)where (no>(" ...
- oracle 11g 64位安装32位客户端和PL/SQL
转自:http://www.360doc.com/content/14/0602/10/4903283_382949382.shtml 这个你需要安装一个32位的oracle客户端才能使用plsq ...