Проблема заключается в определении width. Если изменить размер окна при приведённом коде, то в результате строки наезжает друг на друга (http://s018.radikal.ru/i517/1709/7e/25daa0daae51.png). Если изменить значение метода st.setTextWidth(rect.width()); на st.setTextWidth(option.widget->width());, то расширение строк происходит, как надо, но они выходят за пределы окна (http://i066.radikal.ru/1709/43/b6ed4a844111.png). Если же изменить в sizeHint int width = option.widget->width(); на int width = option.rect.width();, то всё убегает далеко вниз (http://s015.radikal.ru/i331/1709/4c/d18886a504f4.png), потому что width = -1. Подскажите в чём проблема. Заранее благодарю за любую помощь.
void VKDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
QString text = index.data().toString();
QStaticText st;
QRect rect = option.rect;
st.setText(text);
st.setTextWidth(rect.width());
painter->drawStaticText(rect.x(), rect.y(), st);
}
QSize VKDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
int width = option.widget->width();
QRect rect = option.rect;
int height = option.fontMetrics.boundingRect(rect.x(), rect.y(), width, rect.height(), Qt::AlignLeft | Qt::AlignTop | Qt::TextWordWrap, index.data().toString()).height();
return QSize(width, height);
}