Ответ 1
Исправлено. Мне нужно использовать setAcceptHoverEvents(true)
в конструкторе моего класса QGraphicsItem
-derived.
У меня есть класс, полученный из QGraphicsView
, который содержит элементы QGraphicsItem
. Я хочу, чтобы эти элементы меняли цвет всякий раз, когда курсор мыши нависал над ними, поэтому я реализовал hoverEnterEvent
(и hoverLeaveEvent
):
void MyGraphicsItem::hoverEnterEvent(QGraphicsSceneHoverEvent* event)
{
update (boundingRect());
}
Однако этот код обработчика событий никогда не выполняется. Я явно включил отслеживание мыши:
MyGraphicsView::MyGraphicsView(MainView *parent) :
QGraphicsView(parent)
{
setMouseTracking(true);
viewport()->setMouseTracking(true);
...
}
Тем не менее, не повезло. Что я делаю неправильно?
Исправлено. Мне нужно использовать setAcceptHoverEvents(true)
в конструкторе моего класса QGraphicsItem
-derived.
В моем случае события hover не будут работать, если я переопределяю mouseMoveEvent в моей реализации класса QGraphicsView. Я исправил это, добавив вызов
QGraphicsView::mouseMoveEvent(event);
который передал событие родительскому объекту, который, в свою очередь, отправил его всем элементам сцены.