首页 > 代码库 > 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_())

如图: