Я считаю, что лучшее решение - привязать так называемый виджет наложения к окну или даже поместить виджет наложения в собственное окно.
Первое решение может быть легче сделать, но виджет наложения привязан к внутренней части окна.
Если вы выберете второе решение, вам придется поиграть с флагами Windows, чтобы сделать его без полей.
В обоих случаях вам может понадобиться использовать функцию raise()
, чтобы убедиться, что ваш оверлейный виджет находится сверху.
Обсуждение «использования QPaintEvent или QGraphicsScene» не по теме. То, как вы рисуете виджет, не влияет на то, как виджет будет взаимодействовать со стеком виджетов.
Если вам нужен пример, вы можете взглянуть на код QCompleter
, который делает нечто подобное. В частности ищите QCompleter::setPopup()
и QCompleterPrivate::showPopup()
.