меня не получилось (или их просто "мало" в "стандартной" поставке к моей ОС?) и я решил пересобрать либу и добавить её в свои "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, который ведёт к "пропаже" события.
                  
                  
                
Всё-таки пишете на хабр
Обсуждают сегодня