меня не получилось (или их просто "мало" в "стандартной" поставке к моей ОС?) и я решил пересобрать либу и добавить её в свои "Kits", это оказалось довольно просто и приятно;
перекопал свой код вдоль и поперёк (кроме места, на которое бы никогда не подумал грешить)))) )
перекопал QGraphicsScene, QGraphicsItem и QGraphicsView с их приватными классами,
теперь знаю чуть лучше, как работают события мыши в Qt ))
если кратко, то проблема заключалась в том, что после рефакторинга (кто бы мог подумать?) и переноса некоторого функционала по обработке ввода мыши из кастомного QGraphicsPixmapItem в наследника QGraphicsView, некоторые объекты на сцене перестали получать вызов mouseReleaseEvent.
а mousePressEvent срабатывал :)
тут ключевую роль играет именно понятие "mouse grabber" и то, как Qt работает со списком таких объектов.
только объект, который является mouse grabber'ом может получить доп. события после нажатия мышки: mouse move, double click и mouse release.
mouse grabber'ом становятся после QEvent::accept() и его аналогов.
после запуска с дебажной версией Qt я кинул бряк в интересующем меня mousePressEvent, только чтобы убедиться, что этот объект является mouse grabber'ом ( через внутренний приватный класс можно получить доступ к текущей QGraphicsScene и посмотреть список mouse grabber'ов и просто сравнить адрес(а))
но он не получает mouse release!!!
соотв, кто-то или что-то удаляет объект из списка в сцене.
ищем QGraphicsScenePrivate, ищем соотв. обработчики (QGraphicsScenePrivate::grabMouse(), QGraphicsScenePrivate::ungrabMouse()) ставим бряки в них, воспроизводим баг, смотрим стек вызовов.
в результате я обнаружил, что когда в приложении вообще появляется QEvent::MouseRelease, то у моего наследника QGraphicsView срабатывает отправка сигнала в родительский виджет (это вкладка, которая подрабатывает View из MVC), и она просит ... спрятать родителя объекта, для которого я ловил(пытался, ждал и надеялся)) ) mouseReleaseEvent.
соотв. обработчики QGraphicsItemPrivate::setVisibleHelper вызывают QGraphicsItem::ungrabMouse, который ведёт к "пропаже" события.
Всё-таки пишете на хабр
Обсуждают сегодня