我使用启用了透明度的QDialog来选择屏幕捕获工具的屏幕区域。当用户在透明小部件内单击时,我想忽略鼠标事件,以便系统处理它。这可能吗?

我正在尝试在Linux上实现这一目标。

我尝试过的一些事情没有成功:


QtWidgets.QWidget.setWindowFlags(QtCore.Qt.WindowTransparentForInput)
QtWidgets.QWidget.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents)
QtWidgets.QWidget.setMask(QtGui.QRegion(self.geometry()))
子类化mousePressEvent并忽略事件

最佳答案

您必须使用标志X11BypassWindowManagerHint,以便省略WindowTransparentForInput旁边的窗口管理器,以便系统知道它仅必须显示窗口,而不会通知您输入信息。

w.setWindowFlags(w.windowFlags() |
    QtCore.Qt.WindowTransparentForInput |
    QtCore.Qt.X11BypassWindowManagerHint)

09-27 16:00