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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как перерисовать конкретный QTreeWidgetItem?  (Прочитано 4472 раз)
Hordi
Гость
« : Январь 25, 2010, 18:16 »

Задача такая:

Содержимое некоторых колонок в row рисую сам, событие о необходимости перерисовки приходит в функцию "::event" (картинка для отрисовки создается в отдельном потоке), из этой же функции вызываю нижеприведенный код для перерисовки row - он не работает. Если вызываю функцию типа viewport()->update() - работает, но не всегда, да и не совсем правильно рефрешить все если нужно перерисовать одну запись...

Код:
xxx::event(QEvent* e)
{
  ...
  QTreeWidgetItem* pi = ...;
  QTreeWidget::update( indexFromItem(pi) );
}

Qt-4.5.3, 4.6.1
Записан
alex12
Гость
« Ответ #1 : Январь 25, 2010, 18:39 »

Не очень понятно что и как рисуется.

По какому событию?
Это событие из модели?
Использование делегата?
QTreeWidget::setItemWidget() ?
Записан
Hordi
Гость
« Ответ #2 : Январь 25, 2010, 18:57 »

Рисуется в

xxx - наследник от QTreeWidget


void xxx::drawRow( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index )const


если row выделить мышью или поскролить активно - отрисовывается.
Записан
alex12
Гость
« Ответ #3 : Январь 25, 2010, 19:18 »

Может проще пойти по стандартному пути с использованием делегата?

Код:
class MyItemDelegate : public QItemDelegate
{
  public:
  virtual void paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const
  {
  ...
  }
};

Код:
 view->setItemDelegateForColumn(column, new MyItemDelegate);
Записан
Hordi
Гость
« Ответ #4 : Январь 25, 2010, 19:23 »

>Может проще...

А что это даст? Я могу конечно ща переписать по-быстрому, но я не вижу принципиальных отличий...
Записан
Haccel
Гость
« Ответ #5 : Октябрь 12, 2010, 08:02 »

Я выкрутисля так
Код:
// redraw QTreeWidgetItem twi
if( twi->parent() )
{
twi->parent()->setExpanded( twi->parent()->isExpanded() );
}


Пока лучше способа не нашёл
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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