Qt + Безрамное окно + Компоновка

Я пытаюсь открыть пару всплывающих окон (верхнего уровня), которые безрамные. Я могу добиться этого с помощью:

window.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog)

Но проблема в том, что окна не проходят через композитор ОС (например, в окнах нет теней).
Я могу получить тени для окон с помощью флагов Qt.Popup и Qt.ToolTip, но у них обоих есть проблемы с поведением, всплывающие подсказки всегда находятся сверху, а всплывающие окна закрываются, когда их фокус теряется.

Итак, есть ли способ показать безрамное окно с эффектом тени менеджера окон ОС по умолчанию?

1

Решение

Нашел обходной путь на окнах. но я не мог сделать это с Qt, поэтому я использовал хак win32.
Добавьте это в конструктор класса QWidget:

if sys.platform == 'win32':
import win32api
win32api.SetClassLong(eval(self.winId().__hex__()), -26, 0x0008 | 0x00020000)

Я на самом деле добавил стиль CS_DROPSHADOW в стили класса окна

1

Другие решения

Это может помочь следующим пользователям использовать флаг Qt.ToolTip и избежать появления всплывающих подсказок.

self.setWindowFlags(self.windowFlags() | Qt.ToolTip)
self.setWindowFlags(self.windowFlags() & ~Qt.WindowStaysOnTopHint)
1

По вопросам рекламы [email protected]