Como forçar QAbstractItemView recalcular itens sizeHints

Eu tenho QListView e QTabWidget dentro do QSplitter. O QListView está usando um modelo personalizado e delegados personalizados. Em delegate eu reimplementou os métodos paint e sizeHint. Mas quando eu redimensiono a visualização, a altura dos elementos não é recalculada. Como posso consertar isso? Imagens de amostra:

No google, descobri que é possívelEmitir layoutChanged do modelo, mas quero que apenas a visão atual seja atualizada, porque o conteúdo do modelo não muda.

Delegar código:

void ChatItemDelegate::paint( QPainter *painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const
{
    painter->save();

    ChatItem *item = static_cast< ChatItem * >( index.internalPointer() );
    QTextDocument doc;

    doc.setHtml( item->htmlText() );
    doc.setTextWidth( option.rect.width() );

    QRect clip( 0, 0, option.rect.width(), option.rect.height() );
    painter->translate( option.rect.topLeft() );

    QColor bgColor = index.row() % 2 ? QColor( 255, 0, 0, 40 ) : QColor( 0, 255, 0, 40 );
    painter->fillRect( clip, bgColor );
    doc.drawContents( painter, clip );

    qDebug() << "paint: " << option.rect.width() << " idx: " << index.row();

    painter->restore();
}

QSize ChatItemDelegate::sizeHint( const QStyleOptionViewItem& option, const QModelIndex& index ) const
{
    ChatItem *item = static_cast< ChatItem * >( index.internalPointer() );
    QTextDocument doc;

    doc.setHtml( item->htmlText() );
    doc.setTextWidth( option.rect.width() );

    qDebug() << "hint:  " << option.rect.width() << " idx: " << index.row();

    return doc.size().toSize();
}

Pergunta semelhante

questionAnswers(3)

yourAnswerToTheQuestion