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

Reply via email to