Как нарисовать ICO + текстовые данные с делегатом в QTreeWidget (при выборе строки)? - PullRequest
0 голосов
/ 14 октября 2011

Проблема : Когда я выбираю строку с мышью на столе, рис # 1 становится рис # 2 - как вы можете видеть, все моинарисованные значки исчезают!

Вопрос : кто-нибудь может мне помочь с этой проблемой?Может быть, кто-то уже столкнулся с этой дилеммой и решил ее?Спасибо!

рис. 1

enter image description here

рис. 2

enter image description here

Дополнительно : я использую QTreeWidget в качестве таблицы с некоторыми данными ( скрытый корень ).К QTreeWidget объекту я добавляю делегатов столбцов (для 1, 2 и 3 столбцов, но не для столбца 4!).Во всех делегатах (которые основаны на QStyledItemDelegate классе) я повторно реализовал метод paint(), чтобы нарисовать мои определенные значки или текстовые данные.

Вот код одного из делегатов (1 столбец)- это какая-то цепочка, некоторые элементы сгруппированы (родитель + потомки):

void ChainTableDelegate::paint( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const
{
     QStyleOptionViewItem op = option;
     op.state &= ~QStyle::State_HasFocus;

     if( index.column() == TreeView::ePosChain )
     {
          QModelIndex parentIndex = index.parent();

          if( !childCount( index ) && !parentIndex.isValid() )
          {
               QStyledItemDelegate::paint( painter, op, index );
               return;
          }

          if( !parentIndex.isValid() )
          {
               // top
               painter->drawPixmap( pos( op, topActivePix_ ), topActivePix_ );
          }
          else
          {
               int row = index.row();
               if( row != childCount( parentIndex ) - 1 )
               {
                    // middle
                    painter->drawPixmap( pos( op, middleActivePix_ ), middleActivePix_ );
               }
               else
               {
                    // bottom
                    painter->drawPixmap( pos( op, bottomActivePix_ ), bottomActivePix_ );
               }
          }
     }

     QStyledItemDelegate::paint( painter, op, index );
}

1 Ответ

2 голосов
/ 14 октября 2011

Я думаю, что вы должны сначала вызвать родительский метод, а затем нарисовать растровое изображение:)

В противном случае вы просто перезапишете только что нарисованный значок с эффектом выделения

Cheers

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...