Is it possible to override the data() method of a QSqlRelationalTableModel? In my attempts so far, my model instance isn't calling its data() method. (See attached.)

I'm hoping to be able to adapt a QSqlRelationalTableModel object to display only specified item rows directly. Using the view's setRowHidden() method is proving clunky.

Thanks in advance!
Scott



#!/usr/bin/env python

from PyQt4 import QtCore, QtGui, QtSql

# column enumeration
ID, NAME, DESCRIPTION, COLOR_ID = range(4)



#-------------------------------------------------------------------------------
# class
#-------------------------------------------------------------------------------
class TestModel(QtGui.QWidget):
	def __init__(self, parent=None):
		QtGui.QWidget.__init__(self)



		# init
		# ------------------------------------------------
		self.displayList        = []



		# table model
		# ------------------------------------------------
		self.theModel = QtSql.QSqlRelationalTableModel(self)
		self.theModel.setTable("test")

		self.theModel.setRelation(COLOR_ID, QtSql.QSqlRelation("color", "color_id", "name"))
		self.theModel.setSort(ID, QtCore.Qt.AscendingOrder)
		self.theModel.setEditStrategy(QtSql.QSqlRelationalTableModel.OnManualSubmit)

		# column headers
		self.theModel.setHeaderData(ID, QtCore.Qt.Horizontal, QtCore.QVariant("ID"))
		self.theModel.setHeaderData(NAME, QtCore.Qt.Horizontal, QtCore.QVariant("Name"))
		self.theModel.setHeaderData(DESCRIPTION, QtCore.Qt.Horizontal, QtCore.QVariant("Description"))
		self.theModel.setHeaderData(COLOR_ID, QtCore.Qt.Horizontal, QtCore.QVariant("Color"))
		
		select = self.theModel.select()

		# TEST
		self.setDisplayList([1, 2])



	# methods
	# ------------------------------------------------

	def setDisplayList(self, theList):
		self.displayList  = theList

		

	def data(self, index, role=QtCore.Qt.DisplayRole):
		print "testModel.data() ..."
		if not index.isValid() or \
		   not (0 <= index.row() < self.theModel.rowCount()) or \
		   not (index.row() in self.displayList):
			return QVariant()

        if role == Qt.DisplayRole:
            if column == NAME:
                return QVariant(self.theModel.record.value(NAME).toString())

			elif column == DESCRIPTION:
                return QVariant(self.theModel.record.value(DESCRIPTION).toString())

			elif column == COLOR_ID:
                return QVariant(self.theModel.record.value(COLOR_ID).toString())

		return QVariant



_______________________________________________
PyQt mailing list    [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to