Russian Qt Forum
Ноябрь 24, 2024, 21:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: CtableMyTreeDelegate::paint при изменении шрифта текст выползает за границу  (Прочитано 3459 раз)
Маус
Гость
« : Январь 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);
}
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Январь 12, 2013, 13:58 »

Код:
painter.save();
painter.setClipRect(opt.rect);
...paint...
painter.restore();

Должно помочь. По идее клипать должен тривью, но я не помню в нем такого кода.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #2 : Январь 12, 2013, 14:36 »

По идее клипать должен тривью, но я не помню в нем такого кода.
Неа, клипает QStyle::drawControl().
Записан

Qt 5.11/4.8.7 (X11/Win)
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #3 : Январь 12, 2013, 14:52 »

А если делегат, внезапно, не StyledItem?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #4 : Январь 12, 2013, 15:04 »

А если делегат, внезапно, не StyledItem?
Ну и что?
StyledItem в отличии от простого Item всего лишь поддерживает CSS.
Отрисовка обоих всё равно делается через QStyle::drawControl().
Записан

Qt 5.11/4.8.7 (X11/Win)
Маус
Гость
« Ответ #5 : Январь 12, 2013, 15:21 »

Авварон, спасибо! Помог первый ответ! Проблема РЕШЕНА!

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

господа, не могли бы зайти еще в
http://www.prog.org.ru/topic_23957_0.html
есть серьезная проблема с утечкой памяти
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.24 секунд. Запросов: 23.