通过代理实现
头文件
#ifndef DELEGATE_H
#define DELEGATE_H
#include <QObject>
#include <QItemDelegate>
#include <QStyledItemDelegate>
#include <QAbstractItemView>
#include <QPainter>
class Delegate : public QItemDelegate
{
Q_OBJECT
public:
explicit Delegate(QObject *parent = nullptr);
void onHoverIndexChanged(const QModelIndex& index);
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
signals:
private:
int m_hoverrow;
QBrush kHoverItemBackgroundcColor;
public slots:
};
#endif // DELEGATE_H
cpp文件
#include "delegate.h"
#include <QDebug>
Delegate::Delegate(QObject *parent) : QItemDelegate(parent)
{
// QPixmap pixmap(":/123.png");
QColor color(247,33,33,100);
kHoverItemBackgroundcColor = QBrush(color);
}
void Delegate::onHoverIndexChanged(const QModelIndex &index)
{
m_hoverrow = index.row();
}
void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
painter->drawText(option.rect,index.data().toString());
if(index.row() == m_hoverrow)
{
painter->fillRect(option.rect, kHoverItemBackgroundcColor);
}
}
MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <delegate.h>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
signals:
void hoverIndexChanged(QModelIndex);
private slots:
void on_tableWidget_entered(const QModelIndex &index);//tableWidget进入事件
private:
Ui::MainWindow *ui;
Delegate *delegate;
};
#endif // MAINWINDOW_H
MainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->tableWidget->setMouseTracking(true);
delegate = new Delegate(this);
connect(this,&MainWindow::hoverIndexChanged,delegate,&Delegate::onHoverIndexChanged);
ui->tableWidget->setItemDelegate(delegate);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_tableWidget_entered(const QModelIndex &index)
{
emit hoverIndexChanged(index);
}
效果