C++ Qt+;无框窗&x2B;合成

C++ Qt+;无框窗&x2B;合成,c++,python,qt,pyqt4,shadow,C++,Python,Qt,Pyqt4,Shadow,我正在尝试打开两个无框架的弹出窗口(顶层)。我可以通过以下方式实现这一目标: window.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog) 但问题是windows没有通过OS合成器(例如,在windows上,它们没有阴影)。 我可以使用Qt.Popup和Qt.ToolTip标志实现windows阴影,但这两种标志都存在行为问题,工具提示始终位于顶部,当焦点丢失时,弹出窗口关闭 那么,有什么方法可以显示具有默认操作系统窗口管理器阴影效果的无框

我正在尝试打开两个无框架的弹出窗口(顶层)。我可以通过以下方式实现这一目标:

window.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog)
但问题是windows没有通过OS合成器(例如,在windows上,它们没有阴影)。 我可以使用Qt.Popup和Qt.ToolTip标志实现windows阴影,但这两种标志都存在行为问题,工具提示始终位于顶部,当焦点丢失时,弹出窗口关闭


那么,有什么方法可以显示具有默认操作系统窗口管理器阴影效果的无框窗口吗?

找到了windows上的解决方法。但是我不能用Qt来完成,所以我使用win32 hack。
将其添加到QWidget类构造函数:

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

实际上,我将CS_DROPSHADOW样式添加到了窗口类样式中,这可能有助于下一个用户使用Qt.ToolTip标志,避免工具提示始终位于顶部

Python代码
self.setWindowFlags(self.windowFlags()| Qt.ToolTip)
self.setWindowFlags(self.windowFlags()&~Qt.WindowStaysOnTopHint)

请检查,我不确定这是否是您想要的,但对于无框窗口,您需要绘制阴影效果是的,我看到了那篇文章。但这并不能满足我的程序需求,我正在开发一个在桌面上显示弹出窗口(需要阴影)的应用程序。所以我需要默认的OS合成器,就像其他桌面级窗口一样