PDA

View Full Version : yqt delegate text wrapping sizeHint and paint



lukeQt
1st August 2015, 23:15
Hi Everyone,

I have a sqlrelationaltablemodel and a subclassed delegate how do you get text wrapping to work? Can you please explain the sizeHint and the paint method?

This is what I have so far, but no matter how much text is in the cell I only see two lines. Why is that? What am I missing?



def sizeHint(self, option, index):
"""
size hint is being used to control text wrap of the definition.
All columns are allowed to text wrap, but only definition is
believed to need text wrapping.
"""
# set the sizeHint for all columns.
if index.isValid():
fm = option.fontMetrics
text = index.model().data(index)
document = QtGui.QTextDocument()
document.setDefaultFont(option.font)
document.setPlainText(text.toString())

# change cell Width, height (One can add or subtract to change
# the relative dimension).
#return QtCore.QSize(QtSql.QSqlRelationalDelegate.sizeHint (self, option, index).width() + 200,
# QtSql.QSqlRelationalDelegate.sizeHint(self, option, index).height() +200)

return QtCore.QSize(document.idealWidth(), QtSql.QSqlRelationalDelegate.sizeHint(self, option, index).height())

# Else the index is not valid and then return the base method.
else:
return super(ObjDelegate, self).sizeHint(option, index)


def paint(self, painter, option, index):
"""
This will allow for text wrapping. The paint method will paint the text.
"""
if index.isValid():
# This will highlight the selected cell.
if option.state & QtGui.QStyle.State_Selected:
painter.fillRect(option.rect, option.palette.highlight())

# Get the text from the model.
text = index.model().data(index)

# Initialize the Qtextdocument.
document = QtGui.QTextDocument()
document.setPlainText(text.toString())
document.setDefaultFont(option.font)

# settextwidth.
document.setTextWidth(option.rect.width())

ctx = QtGui.QAbstractTextDocumentLayout.PaintContext()

# Save the painter. Saves the current painter state.
# This is so that we can redraw it later.
painter.save()
painter.translate(option.rect.topLeft())
document.documentLayout().draw(painter, ctx)
painter.restore()

else:
return super(ObjDelegate, self).paint(painter, option, index)