fereria
2/7/2015 - 5:55 AM

ProxyModel Test

ProxyModel Test

## -*- coding: utf-8 -*-
import os.path

import sys
from PySide           import QtCore, QtGui
from PySide.QtUiTools import QUiLoader

pathThisFile  = os.path.dirname(os.path.abspath(__file__))

class proxyModelTest(QtGui.QDialog):

    uiFile = pathThisFile + "/proxyModel.ui"

    def __init__(self,parent=None):

        super(proxyModelTest,self).__init__(parent)

        self.setWidget()
        
        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.ui)
        self.setLayout(layout)

        #ModelSet
        #抽出前のリスト
        self.sourceModel = QtGui.QStandardItemModel()
        self.ui.sourceView.setModel(self.sourceModel)
        self.setItem()
        #抽出後のリスト
        self.proxyModel = QtGui.QSortFilterProxyModel()
        self.proxyModel.setDynamicSortFilter(True)
        self.ui.proxyView.setModel(self.proxyModel)
        self.proxyModel.setSourceModel(self.sourceModel)

        self.ui.lineEdit.textChanged.connect(self.changeFilter)

    def setItem(self):

        itemList = ["aaabbbccc","dddeeefff","ggghhhiii","abc","def"]
        
        for i in itemList:
            item = QtGui.QStandardItem(i)
            self.sourceModel.appendRow(item)

    def setWidget(self):

        qLoader = QUiLoader()
        qFile   = QtCore.QFile(self.uiFile)
        qFile.open(QtCore.QFile.ReadOnly)
        self.ui = qLoader.load(qFile,self)
        qFile.close()

    def changeFilter(self):

        #QtCore.Qt.CaseInsensitive 大文字小文字を区別しない
        regExp = QtCore.QRegExp(self.ui.lineEdit.text(),
                               QtCore.Qt.CaseInsensitive,
                               QtCore.QRegExp.RegExp)
        
        self.proxyModel.setFilterRegExp(regExp)


app = QtGui.QApplication(sys.argv)
a = proxyModelTest()
a.show()
sys.exit(app.exec_())