Собственный виджет является контейнером для других виджетов. В собственном виджете нужно ловить все движения мышки, в том числе те, которые происходят над детьми. Если курсор мышки оказывается в определенной клиенсткой позиции, предположим в угле виджета, то нужно "снять" последнее изображение, которое содержит собственный виджет (grabWidget(), render() и т.п.), затем убрать/спрятать все дочерние виджеты, отрисовать в paintEvent'e сохранённое изображение. Когда курсор мышки покинет "зону интересов", то все дочерние виджеты снова показать на экране.
В итоге поведение должно выглядеть следующим образом. Двигаем указатель мышки в угол виджета, если там находится какая-нибудь кнопка-ребенок, то клик по ней не отрабатывается, вместо этого поверх ребенка (а точнее поверх скриншота) рисуется своя кнопка, нажатие по которой и обрабатывается собственным виджетом. При покидании "зоны интересов" всё возвращается обратно. Чтобы была возможность работать с дочерней кнопкой находящейся в "зоне интересов" можно выставить паузу. Но реальная цель - сделать анимацию, а не всплывающие кнопки.