У меня возникли проблемы с захватом событий при наведении и выходе при наведении QGraphicsRectItem
,
Я переклассифицировал этот объект и переопределил обработчики при наведении и отпускании при наведении … или, по крайней мере, мне так кажется. Я также устанавливаю для события accept hover значение true в конструкторе.
Событие никогда не запускается, однако. Точки останова внутри обработчиков никогда не удаляются.
Вот класс:
#include "qhgraphicsrectitem.h"
QhGraphicsRectItem::QhGraphicsRectItem(QGraphicsRectItem *parent) :
QGraphicsRectItem(parent)
{
setAcceptHoverEvents(true);
setAcceptsHoverEvents(true);
}
void QhGraphicsRectItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) {
oldBrush = brush();
setBrush(QBrush(QColor((oldBrush.color().red() + (0.5 * (255-oldBrush.color().red()))),(oldBrush.color().green() + (0.5 * (255-oldBrush.color().green()))),(oldBrush.color().blue() + (0.5 * (255-oldBrush.color().blue()))))));
}
void QhGraphicsRectItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) {
setBrush(oldBrush);
}
Что я делаю не так?
Вы отметили свой hoverEnterEvent
а также hoverLeaveEvent
как виртуальный? Если вы этого не сделаете, события могут быть запущены, но QGraphicsItem
вместо этого обрабатывает событие.
class QhGraphicsRectItem : public QGraphicsItem
{
...
virtual void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
}
Ваш товар находится под QGraphicsItemGroup
?
У меня была такая же проблема, пока я не нашел эту цитату:
«А QGraphicsItemGroup
это особый тип составного элемента, который обрабатывает себя и всех своих дочерних элементов как один элемент (то есть все события и геометрии для всех дочерних элементов объединяются вместе). «
(Смотри сюда: http://qt-project.org/doc/qt-4.8/qgraphicsitemgroup.html)
Это значит, что QGraphicsItemGroup
звонки setHandlesChildEvents(true)
,
Я исправил свою проблему, позвонив parentItem->setHandlesChildEvents(false)
на любых (и всех) группах, расположенных над моим элементом, для захвата парящих событий. Пуф! События начали появляться в упомянутых вами виртуальных обратных вызовах.