Qt TableWidget - изображение, которое появляется при нажатии на ячейку

Я использую QTableWidget с двумя столбцами. В первом столбце отображаются изображения. Во втором столбце отображается текст. Я зову QBrush::setTexture в первом столбце, а не setIcon функция.

Я хочу, чтобы изображения в первом столбце изменялись при нажатии на их ячейку, но существует проблема с изображением, которое появляется при нажатии на ячейку.

Это изображение, которое я ожидаю:
Это изображение, которое я ожидаю

Это изображение, которое я получаю:
Это изображение, которое я получаю

Вот код

.h файл

class KcBackgroundDelegate : public QStyledItemDelegate { public:
explicit KcBackgroundDelegate(QObject *parent = 0)
       : QStyledItemDelegate(parent)
   {

   }

   void paint(QPainter *painter, const QStyleOptionViewItem &option,
              const QModelIndex &index) const
   {

       QVariant background = index.data(Qt::BackgroundRole);
        if (background.canConvert<QBrush>())
           painter->fillRect(option.rect, background.value<QBrush>());

        QStyledItemDelegate::paint(painter, option, index);

       if(option.state & QStyle::State_MouseOver)
       {
           if(index.column() == 0 )
           {
               painter->save();
               painter->fillRect(option.rect,QBrush(QPixmap(":/Resources/img/System/setting_aircraft_on_bt.png")));
               painter->restore();
           }
       }

       if(option.state & QStyle::State_Selected)
       {
           if(index.column() == 0)
           {
               painter->save();
               painter->fillRect(option.rect,QBrush(QPixmap(":/Resources/img/System/setting_aircraft_click_bt.png")));
               painter->restore();
           }
       }
   }
};

файл.cpp

ui->TW_AIRCRAFT_TYPE->setItemDelegateForColumn(0,new KcBackgroundDelegate(this));
ui->TW_AIRCRAFT_TYPE->setMouseTracking(true);
ui->TW_AIRCRAFT_TYPE->viewport()->setMouseTracking(true);
ui->TW_AIRCRAFT_TYPE->installEventFilter(this);
ui->TW_AIRCRAFT_TYPE->viewport()->installEventFilter(this);

Кажется, есть проблема с делегатом, но я не знаю, как это исправить. Пожалуйста, помогите мне.

0 ответов

Другие вопросы по тегам