Thanks a lot for your advice, now it was quite easy.
As you suggested, I post an event when I recieve WindowActivate, and I ignore the mouse release if my custom event occurs between mouse press and mouse release.
If the window is activated by a mouse click, the events are:
- WindowActivate (post ActivatedUserEvent here)
- MouseButtonPressed (already in Queue)
- ActivatedUserEvent (my custom event)
- MouseButtonReleased
If the window is activated by Tab, the events are
- WindowActivate (post ActivatedUserEvent here)
- ActivatedUserEvent (my custom event)
- MouseButtonPressed
- MouseButtonReleased
The code looks like this:
bool MyGraphicsView
::event(QEvent* event
) {
switch (event->type())
{
break;
case Private::ActivatedUserEvent:
ignoreNextMouseRelease = true;
break;
default:
break;
}
}
void MyGraphicsView
::mousePressEvent(QMouseEvent* event
) {
ignoreNextMouseRelease = false;
}
void MyGraphicsView
::mouseReleaseEvent(QMouseEvent* event
) {
if (ignoreNextMouseRelease)
{
ignoreNextMouseRelease = false;
return;
}
}
bool MyGraphicsView::event(QEvent* event)
{
switch (event->type())
{
case QEvent::WindowActivate:
QCoreApplication::postEvent(this, new QEvent(ActivatedUserEvent));
break;
case Private::ActivatedUserEvent:
ignoreNextMouseRelease = true;
break;
default:
break;
}
return QGraphicsView::event(event);
}
void MyGraphicsView::mousePressEvent(QMouseEvent* event)
{
QGraphicsView::mousePressEvent(event);
ignoreNextMouseRelease = false;
}
void MyGraphicsView::mouseReleaseEvent(QMouseEvent* event)
{
if (ignoreNextMouseRelease)
{
ignoreNextMouseRelease = false;
return;
}
QGraphicsView::mouseReleaseEvent(event);
}
To copy to clipboard, switch view to plain text mode
Bookmarks