如何将 QWindow 设置为对鼠标和其他事件透明?

Posted

技术标签:

【中文标题】如何将 QWindow 设置为对鼠标和其他事件透明?【英文标题】:How to set QWindow to be transparent to mouse and other events? 【发布时间】:2021-09-24 13:10:19 【问题描述】:

我正在构建一个覆盖以在全屏应用程序上显示 OBS 流统计信息。 我已经设法通过将 Windows 标志设置为:WindowStaysOnTopHint | FramelessWindowHint X11BypassWindowManagerHint)

来实现它的视觉部分

问题是此窗口响应鼠标(悬停时将光标更改为系统一)并阻止单击操作。我发现WA_TransparentForMouseEventsWA_TranslucentBackground 会有所帮助,但没有。

from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtCore import Qt
app = QApplication([])
window = QWidget()
window.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint )#| Qt.X11BypassWindowManagerHint)
window.setAttribute(Qt.WA_TransparentForMouseEvents,True)
window.setAttribute(Qt.WA_TranslucentBackground,True)
window.show()
app.exec()

如何使 QtWindow 对鼠标和其他事件透明。在其他作品中充当适当的叠加层。

【问题讨论】:

尝试添加Qt.Tool窗口标志。 @musicamante 还是一样 :( 也可以试试Qt.WindowDoesNotAcceptFocus,如果你在Linux上,设置属性Qt.WA_X11DoNotAcceptFocus Ech.. 它是WindowTransparentForInput 好吧,如果该标志适合您,您可以提供自己的答案 :-) 【参考方案1】:

需要设置的标志是:

Qt::WindowTransparentForInput

通知窗口系统该窗口仅用于输出(显示某些内容),不接受输入。因此,输入事件应该像不存在一样通过。

https://doc.qt.io/qt-5/qt.html#WindowType-enum

【讨论】:

以上是关于如何将 QWindow 设置为对鼠标和其他事件透明?的主要内容,如果未能解决你的问题,请参考以下文章

使用 QWindow 进行拖放

将 QWidget 或其他 QWidget 派生控件添加到 QWindow

如何使鼠标事件透过JFrame窗口

有没有办法使控件对 WPF 中的鼠标事件透明?

在HTML里浮层遮挡之下的video上鼠标事件失效了,怎么解决呢?

C#如何让窗体中间一部分让鼠标透过