Items overlap in QStyledItemDelegate descendant (QListView contents)
-
Good morning.
I have a bit of a problem writing prototype application. I wrote sample item delegate, implemented its sizeHint and paint methods and it seems like paint ignores any changes to QRect variable used for painting: all the items are aligned to left and overlap. Sample code follows:
void BlabDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyledItemDelegate::paint(painter,option,index); painter->save(); QRect irect(option.rect); irect.setHeight(54); irect.setWidth(54); QApplication::style()->drawItemPixmap(painter,irect,0,amodel->get(index.data().toHash()["avatar"].toString()).scaledToHeight(54)); irect = option.rect; irect.setLeft(64); irect.setBottom(option.rect.bottom()-20); QTextDocument doc; doc.setHtml(index.data().toHash()["text"].toString()); doc.drawContents(painter,irect); painter->restore(); } QSize BlabDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { QStyleOptionViewItem iopt = option; iopt.rect.setHeight(64); return QSize(iopt.rect.width(),64); }
Now, qDebug() states that irect actually has correct values (as expected) but QTextDocument looks like inserted under the icon when it should begin with 64px offset from left. Is there something I don't understand about writing paint method? Why does the above code not work? I would appreciate any help since I cannot find the right answer.
EDIT: When I try to draw text as drawItemText from QStyle (and not use QTextDoc) it is all correct.
Kind Regards,
Artur