【问题标题】:Qt + Frameless Window + CompositingQt + 无框窗口 + 合成
【发布时间】:2013-09-30 16:39:19
【问题描述】:

我正在尝试打开几个无框的弹出窗口(顶层)。我可以做到这一点:

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

但问题是窗口不会通过操作系统合成器(例如,在没有投影的窗口上)。 我可以使用 Qt.Popup 和 Qt.ToolTip 标志来实现窗口阴影,但是它们都有行为问题,工具提示总是在顶部,并且当它们失去焦点时弹出窗口会关闭。

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

【问题讨论】:

  • 请检查一下,我不确定这是否是您想要的,但对于无框窗口,您需要绘制阴影效果stackoverflow.com/questions/12347776/…
  • 是的,我看到了那个帖子。但这不符合我的程序需求,我正在开发一个在桌面上显示弹出窗口的应用程序(需要被遮蔽)。所以我需要默认的操作系统合成器,就像其他桌面级窗口一样

标签: c++ python qt pyqt4 shadow


【解决方案1】:

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

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

我实际上在窗口类样式中添加了 CS_DROPSHADOW 样式

【讨论】:

    【解决方案2】:

    它可能有助于下一个用户使用 Qt.ToolTip 标志并避免工具提示始终位于顶部。

    Python 代码

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 2011-01-23
      • 2011-01-15
      • 2017-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多