#include "tableWidgetHoverDelegate.h" #include QTableWidgetHoverDelegate::QTableWidgetHoverDelegate(QTableWidget *parent) : QStyledItemDelegate{parent} { m_tableWiget = parent; } QTableWidgetHoverDelegate::~QTableWidgetHoverDelegate() {} void QTableWidgetHoverDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { if(option.state.testFlag(QStyle::State_MouseOver) && m_tableWiget) { QTableWidgetItem* hoveredItem = m_tableWiget->item(index.row(), index.column()); if(hoveredItem) { int row = index.row(); for(int column = 0; column < m_tableWiget->columnCount(); column++) { QTableWidgetItem* item = m_tableWiget->item(row, column); if(!item) continue; QModelIndex index = m_tableWiget->model()->index(row, column); QStyleOptionViewItem itemOption = option; itemOption.rect = m_tableWiget->visualItemRect(item); QStyledItemDelegate::paint(painter, itemOption, index); } } } else { /*int row = index.row(); int col = index.column(); QTableWidgetItem* item = m_tableWiget->item(row, col); QRect rect = m_tableWiget->visualItemRect(item); //qDebug() << row << ", " << col << " optionRect:" << option.rect << " visualItemRect:" << rect; painter->save(); painter->setPen(Qt::red); painter->drawLine(rect.x(), rect.y() + rect.height()*0.5, rect.x() + rect.width(), rect.y() + rect.height()*0.5); //painter属于view,所以要以view的坐标系为标准 painter->restore();*/ QStyledItemDelegate::paint(painter, option, index); } }