首页 > 代码库 > qt QSortFilterProxyModel
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_())
如图: