Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Hordi от Январь 25, 2010, 18:16



Название: Как перерисовать конкретный QTreeWidgetItem?
Отправлено: 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


Название: Re: Как перерисовать конкретный QTreeWidgetItem?
Отправлено: alex12 от Январь 25, 2010, 18:39
Не очень понятно что и как рисуется.

По какому событию?
Это событие из модели?
Использование делегата?
QTreeWidget::setItemWidget() ?


Название: Re: Как перерисовать конкретный QTreeWidgetItem?
Отправлено: Hordi от Январь 25, 2010, 18:57
Рисуется в

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


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


если row выделить мышью или поскролить активно - отрисовывается.


Название: Re: Как перерисовать конкретный QTreeWidgetItem?
Отправлено: alex12 от Январь 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);


Название: Re: Как перерисовать конкретный QTreeWidgetItem?
Отправлено: Hordi от Январь 25, 2010, 19:23
>Может проще...

А что это даст? Я могу конечно ща переписать по-быстрому, но я не вижу принципиальных отличий...


Название: Re: Как перерисовать конкретный QTreeWidgetItem?
Отправлено: Haccel от Октябрь 12, 2010, 08:02
Я выкрутисля так
Код:
// redraw QTreeWidgetItem twi
if( twi->parent() )
{
twi->parent()->setExpanded( twi->parent()->isExpanded() );
}


Пока лучше способа не нашёл