Qt +无框窗口+合成

时间:2013-09-30 16:39:20

标签: c++ python qt pyqt4 shadow

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

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

但问题是Windows不会通过OS合成器(例如在Windows上没有阴影)。 我可以用Qt.Popup和Qt.ToolTip标志来实现窗口阴影,但是这两个都有行为问题,工具提示总是在顶部,弹出窗口在焦点丢失时关闭。

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

2 个答案:

答案 0 :(得分:1)

在Windows上找到了解决方法。但是我无法用Qt做到这一点,所以我使用了win32 hack 将其添加到QWidget类构造函数:

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

我实际上将CS_DROPSHADOW样式添加到窗口类样式

答案 1 :(得分:1)

下一个用户可以使用Qt.ToolTip标记,避免将工具提示始终放在最前面。

Python代码

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