Я использую С++ Qt5. В настоящее время у меня есть QStandardItemModel, отображаемый как QTreeView с несколькими строками и столбцами. Я знаю об использовании setStyleSheet(), но это просто меняет цвет строки. Что я ищу, так это то, что когда мышь наводит курсор на строку, вызывается функция, которую я затем могу использовать для управления своей игрой.
QTreeView, как вызвать действие при наведении мыши на строку?
Ответы (1)
Вы можете использовать делегат (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);
}
}
person
Andrey Semenov
schedule
26.11.2018
setMouseTracking(true)
должен быть вызван первым для представления элементов, иначе QStyle::State_MouseOver
не будет установлен в option.state
.
- person Jruv; 08.01.2021
mouseMoveEvent()
. Может быть, для этого стоит упомянутьQTreeView::indexAt()
, который Возвращает индекс модели элемента в точке координат окна просмотра. - person Scheff's Cat   schedule 24.11.2018