Как заставить QAbstractItemView пересчитать элементы sizeHints

У меня есть QListView и QTabWidget внутри QSplitter. QListView использует пользовательскую модель и пользовательские делегаты. В делегате я переопределил методы paint и sizeHint. Но когда я изменяю размер представления - высота элементов нет пересчитано. Как я могу это исправить? Образцы изображений:

В гугле я обнаружил, что можноиспускать layoutChanged из модели, но я хочу, чтобы обновлялся только текущий вид, потому что содержимое модели нет изменить.

Код делегата:

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();
}

Ответы на вопрос(3)

Ваш ответ на вопрос