码迷,mamicode.com
首页 > 其他好文 > 详细

qt QSortFilterProxyModel

时间:2014-08-13 21:30:47      阅读:336      评论:0      收藏:0      [点我收藏+]

标签:blog   http   color   使用   os   io   数据   ar   

# -*- 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_())

如图:bubuko.com,布布扣

qt QSortFilterProxyModel,布布扣,bubuko.com

qt QSortFilterProxyModel

标签:blog   http   color   使用   os   io   数据   ar   

原文地址:http://www.cnblogs.com/mhxy13867806343/p/3910603.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!