问题:当我在桌面上选择一个带鼠标的行时, pic#1 变为 pic#2 - 正如您所见,我所有绘制的图标都消失了!
问题:任何人都可以帮我解决这个问题吗?也许有人已陷入这种困境并解决它? Thnks!
pic#1
pic#2
其他:我正在使用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 );
}
答案 0 :(得分:2)
我认为你应该首先调用父方法,然后绘制像素图:)
否则,您只需使用高亮效果覆盖刚刚绘制的图标
干杯