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

时间:2018-11-23 19:54:31

标签: qt qt5 qtreeview qstandarditemmodel

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

1 个答案:

答案 0 :(得分:2)

您可以使用委托(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);
    }
}