Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: mal от Июнь 21, 2007, 11:04



Название: Qt 4.3.0 hoverEnterEvent для для ребенка QGraphicsItemGroup
Отправлено: mal от Июнь 21, 2007, 11:04
Доброе время суток!

Есть наследник QGraphicsItemGroup (назовем его grp) , в него помещено N элементов,  наследников,например, QGraphicsLineItem *p_item.

Для группы заданы свойства:
grp.setAcceptsHoverEvents(true);
grp.setFlag(QGraphicsItem::ItemIsFocusable,true);
grp.setHandlesChildEvents(true);

для детей группы также заданы свойства:
p_item->setAcceptsHoverEvents(true);
p_item->setFlag(QGraphicsItem::ItemIsFocusable,true);

События
void hoverEnterEvent ( QGraphicsSceneHoverEvent * event );
void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event );
переопределены и в классе группы и в классе "айтемов" детей.

Однако событие hoverEnterEvent приходит только в объект группы и никак не ловится в его детях.
*
К примеру: мне надо определить над каким элементом группы находится курсор. Приходиться брать список элементов группы (QList<QGraphicsItem *> QGraphicsItem::children () const )
и далее шариться по списку проверяя не попадает ли курсор в boundingRect соответствующего item'а. Что не есть гуд.
*
Подскажите, сталкивался ли кто с описаной проблемой, и как ее решал? Т.е. как заставить ребенка группы ловить hoverEnterEvent ?  детей группы!

добавлено спустя 2 часа:

 Сам же уже и отвечу ибо разобрался :-)

для группы надо установить
setHandlesChildEvents(false);

тогда она будет принимать сообщения mouseMove от ребенка, но не будет перехватывать hoverEvent'ы  и ребенок будет ловить

void hoverEnterEvent ( QGraphicsSceneHoverEvent * event );
 void hoverLeaveEvent ( QGraphicsSceneHoverEvent * event );

Вопрос с повестки снят ;-)


Название: Re: Qt 4.3.0 hoverEnterEvent для для ребенка QGraphicsItemGroup
Отправлено: d.rogkov от Июнь 06, 2009, 22:11
Спасибо, что разобрался!