编写原型应用程序时遇到了一些问题。我编写了示例项委托,实现了它的sizeHint和paint方法,看起来paint忽略了对用于绘制的QRect变量的任何更改:所有项都对齐到左边并重叠。示例代码如下:
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);
}
现在,qDebug()声明irect实际上具有正确的值(如预期的那样),但QTextDocument看起来像插入图标下面,当它应该从左边64px偏移开始。 关于编写绘画方法有什么我不明白的吗?为什么上面的代码不起作用?我很感激任何帮助,因为我找不到合适的答案。
亲切的问候, 阿图尔
编辑:我已经按照SaZ的建议插入了更改。