如何将 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_TransparentForMouseEvents
和WA_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 设置为对鼠标和其他事件透明?的主要内容,如果未能解决你的问题,请参考以下文章
将 QWidget 或其他 QWidget 派生控件添加到 QWindow