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 PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt