QTreeView,当鼠标悬停在一行上时如何调用一个动作?

QTreeView, how to call an action when mouse hovers over a row?

我正在使用 C++ Qt5。目前我有一个 QStandardItemModel 显示为具有多行和多列的 QTreeView。我知道使用 setStyleSheet(),但这似乎只是改变了行的颜色。我正在寻找的是当鼠标悬停在一行上时,调用一个函数,然后我可以用它来操纵我的游戏。

您可以使用委托 (http://doc.qt.io/qt-5/qtwidgets-itemviews-stardelegate-example.html) 和 QStyle::State_MouseOver 来检查鼠标是否悬停在一行上。 您应该覆盖 paint 方法。

void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const {
    if(index.row() == 2 && (option.state & QStyle::State_MouseOver)) {
        painter->fillRect(option.rect, Qt::blue);
    } else {
        QStyledItemDelegate::paint(painter, option, index);
    }
}