Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Маус от Январь 12, 2013, 12:22



Название: CtableMyTreeDelegate::paint при изменении шрифта текст выползает за границу
Отправлено: Маус от Январь 12, 2013, 12:22
В делегате меняю шрифт, при изменении размера текст "выползает" вправо за границы колонки QTreeView. Даже если в соседней колонке есть информация, то она просто затирается. Но если выделить строку, то в текущей (выделенной строке) обрезается правильно. Qt 4.7

void CtableMyTreeDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
   const QModelIndex &index) const
{
        QStyleOptionViewItem  myOption = option;
   myOption.font = QFont(sMyFont,nFontSize,50,false);
   drawDisplay(painter, myOption, myOption.rect, text);
   drawFocus(painter, myOption, myOption.rect);
}

Вариант в ModelView не подходит, т.к. он не обрабатвает элементы с своими делегатами (а так конечно работает):

QVariant CtableMyTreeModel::data(const QModelIndex &index, int role) const
{
   case Qt::FontRole:
      return QFont(sMyFont,nFontSize,50,false);
}


Название: Re: CtableMyTreeDelegate::paint при изменении шрифта текст выползает за границу
Отправлено: Авварон от Январь 12, 2013, 13:58
Код:
painter.save();
painter.setClipRect(opt.rect);
...paint...
painter.restore();

Должно помочь. По идее клипать должен тривью, но я не помню в нем такого кода.


Название: Re: CtableMyTreeDelegate::paint при изменении шрифта текст выползает за границу
Отправлено: GreatSnake от Январь 12, 2013, 14:36
По идее клипать должен тривью, но я не помню в нем такого кода.
Неа, клипает QStyle::drawControl().


Название: Re: CtableMyTreeDelegate::paint при изменении шрифта текст выползает за границу
Отправлено: Авварон от Январь 12, 2013, 14:52
А если делегат, внезапно, не StyledItem?


Название: Re: CtableMyTreeDelegate::paint при изменении шрифта текст выползает за границу
Отправлено: GreatSnake от Январь 12, 2013, 15:04
А если делегат, внезапно, не StyledItem?
Ну и что?
StyledItem в отличии от простого Item всего лишь поддерживает CSS.
Отрисовка обоих всё равно делается через QStyle::drawControl().


Название: Re: CtableMyTreeDelegate::paint при изменении шрифта текст выползает за границу
Отправлено: Маус от Январь 12, 2013, 15:21
Авварон, спасибо! Помог первый ответ! Проблема РЕШЕНА!

painter.save();
painter.setClipRect(opt.rect);
...paint...
painter.restore();

господа, не могли бы зайти еще в
http://www.prog.org.ru/topic_23957_0.html
есть серьезная проблема с утечкой памяти