Hello,
i'm having this in my code:
public:
// Event types.
static const QEvent::Type HoverEnter
= static_cast<QEvent
::Type>
(QEvent::User+1);
static const QEvent::Type HoverLeave
= static_cast<QEvent
::Type>
(QEvent::User+2);
// Base event class.
public:
AWBObject *object;
};
// Hover enter event.
class HoverEnterEvent : public AWBObject::Event {
public:
HoverEnterEvent () : Event(HoverEnter) {};
};
// Hover leave event.
class HoverLeaveEvent : public AWBObject::Event {
public:
HoverLeaveEvent () : Event(HoverLeave) {};
};
[...]
};
class AWBObject : public QGraphicsItem {
public:
// Event types.
static const QEvent::Type HoverEnter = static_cast<QEvent::Type>(QEvent::User+1);
static const QEvent::Type HoverLeave = static_cast<QEvent::Type>(QEvent::User+2);
// Base event class.
class Event : public QEvent {
public:
Event (QEvent::Type type) : QEvent(type) {};
AWBObject *object;
};
// Hover enter event.
class HoverEnterEvent : public AWBObject::Event {
public:
HoverEnterEvent () : Event(HoverEnter) {};
};
// Hover leave event.
class HoverLeaveEvent : public AWBObject::Event {
public:
HoverLeaveEvent () : Event(HoverLeave) {};
};
[...]
};
To copy to clipboard, switch view to plain text mode
Then on a QGraphicItem "hoverEnterEvent" and "hoverLeaveEvent" i'm doing something like this:
if (scene()) {
HoverEnterEvent *toSend = new HoverEnterEvent();
toSend->object = this;
}
if (scene()) {
HoverEnterEvent *toSend = new HoverEnterEvent();
toSend->object = this;
QCoreApplication::sendEvent((QObject*)scene(), toSend);
}
QGraphicsItem::hoverEnterEvent(evt);
To copy to clipboard, switch view to plain text mode
Then in my scene subclass:
void WBScene
::customEvent (QEvent *evt
) { switch (evt->type()) {
case AWBObject::HoverEnter:
_highlight = ((AWBObject::Event*)evt)->object;
if (_highlight) _highlight->setHighlighted(true);
return;
case AWBObject::HoverLeave:
_highlight = ((AWBObject::Event*)evt)->object;
if (_highlight) _highlight->setHighlighted(false);
return;
default:
}
}
void WBScene::customEvent (QEvent *evt) {
switch (evt->type()) {
case AWBObject::HoverEnter:
_highlight = ((AWBObject::Event*)evt)->object;
if (_highlight) _highlight->setHighlighted(true);
return;
case AWBObject::HoverLeave:
_highlight = ((AWBObject::Event*)evt)->object;
if (_highlight) _highlight->setHighlighted(false);
return;
default:
return QGraphicsScene::customEvent(evt);
}
}
To copy to clipboard, switch view to plain text mode
Saddly, the event isn't received by the scene. If i post a regular event (e.g. Just propagage the QGraphicsSceneHoverEvent), it's received by the scene in the event() method. i've tried both event() and customEvent() in the scene subclass, in either case the custom event is received.
Note that i'm doing this after i instanciate my QApplication (And before execing the loop):
QEvent::registerEventType(AWBObject
::HoverEnter);
QEvent::registerEventType(AWBObject
::HoverLeave);
QEvent::registerEventType(AWBObject::HoverEnter);
QEvent::registerEventType(AWBObject::HoverLeave);
To copy to clipboard, switch view to plain text mode
Bookmarks