如何在QTreeWidget中使用委托绘制ico +文本数据(选择行时)?

时间:2011-10-14 13:01:20

标签: qt delegates qt4

问题:当我在桌面上选择一个带鼠标的行时, pic#1 变为 pic#2 - 正如您所见,我所有绘制的图标都消失了!

问题:任何人都可以帮我解决这个问题吗?也许有人已陷入这种困境并解决它? Thnks!

pic#1

enter image description here

pic#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 个答案:

答案 0 :(得分:2)

我认为你应该首先调用父方法,然后绘制像素图:)

否则,您只需使用高亮效果覆盖刚刚绘制的图标

干杯