LINUX.ORG.RU

QStyledItemDelegate sizeHint определение width

 


0

2

Проблема заключается в определении 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);
}
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.