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