Russian Qt Forum
Сентябрь 26, 2024, 00:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt 4.3.0 hoverEnterEvent для для ребенка QGraphicsItemGroup  (Прочитано 5148 раз)
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 );

Вопрос с повестки снят ;-)
Записан
d.rogkov
Гость
« Ответ #1 : Июнь 06, 2009, 22:11 »

Спасибо, что разобрался!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.078 секунд. Запросов: 21.