Hello,
What's the best way to explicitly set row and column sizes for a
QTableView?
I'm trying to use an QSqlRelationalDelegate, but print statements show
that its sizeHint() method is never called. The paint() method is.
If I set the editable model methods, I lose the FK comboBoxes.
I must be missing something obvious.
Thanks in advance!
Scott
class GeneralTableDelegate(QtSql.QSqlRelationalDelegate):
def __init__(self, parent=None):
super(GeneralTableDelegate, self).__init__(parent)
print "init() ..."
def paint(self, painter, option, index):
print "paint() ..."
QtSql.QSqlRelationalDelegate.paint(self, painter, option, index)
def sizeHint(self, option, index):
print "sizeHint() ..."
if index.column() == NAME:
print "NAME ..."
return QtCore.QSize(200, 24)
elif index.column() == DESCRIPTION:
return QtCore.QSize(400, 24)
else:
return QtCore.QSize(100, 24)
return QtSql.QSqlRelationalDelegate.sizeHint(self, option,
index)
#!/usr/bin/env python
import sys
from PyQt4 import QtCore, QtGui, QtSql
# column enumeration
ID, NAME, DESC = range(3)
#-------------------------------------------------------------------------------
# class
#-------------------------------------------------------------------------------
class RelationalDelegateTest(QtGui.QWidget):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self)
# table model
# ------------------------------------------------
self.theModel = QtSql.QSqlRelationalTableModel(self)
self.theModel.setTable("foo")
self.theModel.setRelation(BAR_ID, QtSql.QSqlRelation("bar", "bar_id", "name"))
self.theModel.setSort(NAME, QtCore.Qt.AscendingOrder)
self.theModel.setEditStrategy(QtSql.QSqlRelationalTableModel.OnManualSubmit)
# column headers
self.theModel.setHeaderData(FOO_ID, QtCore.Qt.Horizontal, QtCore.QVariant("FOO_ID"))
self.theModel.setHeaderData(NAME, QtCore.Qt.Horizontal, QtCore.QVariant("Name"))
self.theModel.setHeaderData(DESCRIPTION, QtCore.Qt.Horizontal, QtCore.QVariant("Description"))
# table view
# ------------------------------------------------
self.theView = QtGui.QTableView()
self.theView.setModel(self.theModel)
# self.theView.setItemDelegate(QtSql.QSqlRelationalDelegate(self.theView))
self.theView.setItemDelegate(GeneralTableDelegate(self.theView))
self.theView.setSelectionMode(QtGui.QTableView.SingleSelection)
self.theView.setSelectionBehavior(QtGui.QTableView.SelectRows)
self.theView.setColumnHidden(ID, True)
self.theView.resizeColumnsToContents()
self.theView.setSortingEnabled(True)
self.theView.sortByColumn(NAME, QtCore.Qt.AscendingOrder)
self.theView.horizontalHeader().setStretchLastSection(True)
self.theView.verticalHeader().setResizeMode(QtGui.QHeaderView.Fixed)
self.theView.verticalHeader().setDefaultSectionSize(24)
# table layout
# ------------------------------------------------
self.tableLayout = QtGui.QVBoxLayout()
self.tableLayout.addWidget(self.theView)
self.setLayout(self.tableLayout)
# default
# ------------------------------------------------
self.theView.selectRow(0)
# methods
# ------------------------------------------------
#-------------------------------------------------------------------------------
# class
#-------------------------------------------------------------------------------
class GeneralTableDelegate(QtSql.QSqlRelationalDelegate):
def __init__(self, parent=None):
super(GeneralTableDelegate, self).__init__(parent)
print "init() ..."
def paint(self, painter, option, index):
print "paint() ..."
QtSql.QSqlRelationalDelegate.paint(self, painter, option, index)
def sizeHint(self, option, index):
print "sizeHint() ..."
if index.column() == NAME:
print "NAME ..."
return QtCore.QSize(200, 24)
elif index.column() == DESCRIPTION:
return QtCore.QSize(400, 24)
else:
return QtCore.QSize(100, 24)
return QtSql.QSqlRelationalDelegate.sizeHint(self, option, index)
#-------------------------------------------------------------------------------
# main
#-------------------------------------------------------------------------------
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
form = RelationalDelegateTest()
form.setWindowTitle("RelationalDelegateTest")
form.show()
sys.exit(app.exec_())
_______________________________________________
PyQt mailing list [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt