Qt c ++:QStyledItemDelegate后代中的项重叠(QListView内容)

时间:2015-04-25 07:57:17

标签: c++ qt

编写原型应用程序时遇到了一些问题。我编写了示例项委托,实现了它的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的建议插入了更改。

0 个答案:

没有答案