The cause this is most likely that the tab widget is not the actual receiver of the mouse event, its QTabBar child is. So th tab bar reacts to the event first and you see it when it propagates upwards.
My suggestion would be to access the tab bar and its tab buttons.
For all tab buttons that you want a context menu, set the same context actions using addAction() and set the button's contextMenuPolicy to ActionsContextMenu.
You should then only have to react to the actions' triggered() signals.
Another option you could investigate is to use QTabBar's corner widgets.
Cheers,
__
Bookmarks