我在 QTableview 中使用的委托中有一个绘制方法,我在其中将复选框指示器添加到单元格。当我通过检查 QStyle::State_MouseOver 标志的 option.state 进入单元格时,很容易设置复选框的鼠标悬停状态,但理想情况下我需要做的只是在鼠标指针时为复选框指示器设置鼠标悬停状态位于指示器本身上方,而不仅仅是在单元格周围徘徊。不幸的是,目前仅在从一个单元格移动到另一个单元格时才会触发绘制方法,因此我需要一些有关如何执行此操作的指示。
代码如下(其中mouse_pointer_是最后存储的鼠标坐标):
void
CheckBoxDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option,
const QModelIndex& index) const
{
// Draw our checkbox indicator
bool value = index.data(Qt::DisplayRole).toBool();
QStyleOptionButton checkbox_indicator;
// Set our button state to enabled
checkbox_indicator.state |= QStyle::State_Enabled;
checkbox_indicator.state |= (value) ? QStyle::State_On : QStyle::State_Off;
// Get our dimensions
checkbox_indicator.rect = QApplication::style()->subElementRect(QStyle::SE_CheckBoxIndicator, &checkbox_indicator, NULL );
// Position our indicator
const int x = option.rect.center().x() - checkbox_indicator.rect.width() / 2;
const int y = option.rect.center().y() - checkbox_indicator.rect.height() / 2;
checkbox_indicator.rect.moveTo(x, y);
if (checkbox_indicator.rect.contains(mouse_position_)) {
checkbox_indicator.state |= QStyle::State_MouseOver;
}
QApplication::style()->drawControl(QStyle::CE_CheckBox, &checkbox_indicator, painter);
}
任何帮助将非常感激。