0

如何动态更改 qtreewidgetitem 内的背景图标:一些代码示例..

if item.text(0)=="INL"
   item.icon(0).setBackground(Qt.green)
else:
   item.icon(0).setBackground(Qt.yellow) 

我只想要图标背景而不是所有项目(图标+文本).. 测试

4

1 回答 1

1

使用委托项目并覆盖绘制方法。

例子

h 文件

class MyItemDelegate : public QItemDelegate
{
public:
   MyItemDelegate(QObject *parent = Q_NULLPTR);
   void paint ( QPainter * painter, const QStyleOptionViewItem & oStyleOption, const QModelIndex & index ) const;

}

cpp

void MyItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &oStyleOption, const QModelIndex &index) const
{
    // Apply for column 0
    if (index.column() == 0) {  

       // background color
       Qt::GlobalColor eColor;

       // Get table data
       if (index.model()->data(index).toString() == "INL")
           eColor = Qt::green;
       else
           eColor = Qt::yellow;

       painter->save();

       // background rect size (icon size 16x16 + padding)
       QRect oRect(oStyleOption.rect.x() + 2, oStyleOption.rect.y() + 6 , 16, 16);

       // background color
       painter->fillRect(oRect, eColor);
       painter->restore();    
   }
   return QItemDelegate::paint(painter,oStyleOption,index);
}

将项目设置为您的表使用setItemDelegateForColumn

于 2017-11-21T12:21:41.037 回答