コード例 #1
0
class FilterableTableView(QtGui.QWidget):
	
	def __getattr__(self, name):
		"""map all unknown attributes access to the tableview"""
		return getattr(self.tv, name)
	
	def __init__(self, *args, **kwargs):
		super(FilterableTableView, self).__init__(*args, **kwargs)
		
		self.ui = Ui_FilterableTableView()
		self.ui.setupUi(self)
		
		self.filterModel = MultiColumnSortFilterProxyModel()
		self.filterModel.setFilterKeyColumn(-1)
		self.filterModel.setFilterCaseSensitivity(QtCore.Qt.CaseInsensitive)
		
		
		self.tv = self.ui.tableView
		self.filterLayout = self.ui.layout_filters
		self.filterEdit = QtGui.QLineEdit()
		self.filterLayout.addWidget(self.filterEdit)
		self.connect(self.filterEdit, QtCore.SIGNAL('textEdited (const QString&)'), self.setFilter)
		
		
	def setModel(self, model):
		self.filterModel.setSourceModel(model)
		self.tv.setModel(self.filterModel)
		
	def setFilter(self, filterStr):
		filterStr = unicode(filterStr).strip()
		components = filterStr.split()
		
		andComponents = []
		orComponents = []
		filterRegExp = u""
		for component in components:
			if component[0] == u"+":
				andComponents.append(component[1:])
			else:
				orComponents.append(component)
			
		filterRegExp += u"("+u"|".join(orComponents)+")"
		for c in andComponents:
			filterRegExp += u"(?=.*%s)" % c
		
		self.filterModel.setFilterRegExp(filterRegExp)