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);
}
}
我正在使用 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);
}
}