将鼠标事件重定向到 QMenu/QMenuBar 窗口

问题描述 投票:0回答:1

我正在制作一个菜单栏,但是当子菜单打开时,我无法按窗口的 X 按钮,而且当我按其外部时菜单会关闭。我打算忽略菜单中发生的所有鼠标事件。

看来是因为事件完全重定向到了菜单栏。因此,installEventFilter和虚函数可能对此问题没有影响。

我也尝试了

menu.releaseMouse
menu.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents)
,但没有成功。

有没有办法将鼠标事件重定向到窗口,或者可以在不关闭菜单的情况下按下X按钮?

下面是一些将用于创建测试菜单的代码:

from PySide2 import QtWidgets, QtGui

app = QtWidgets.QApplication([])

menu = QtWidgets.QMenuBar()

files = menu.addMenu("Files")
files.addAction("hello")
files.addAction("world")

menu.showMaximized()

app.exec_()
python qt pyside2
1个回答
0
投票

我意识到菜单实际上是内部独立的窗口。玩了一段时间,我发现更改标志,将菜单变成没有所述窗口框架的窗口几乎可以完全解决问题。

class Menu(QtWidgets.QMenu):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.setWindowFlags(QtCore.Qt.Window | QtCore.Qt.FramelessWindowHint)

现在,菜单在单击时不会关闭(这是我想要实现的目标之一),但如果有人希望它们关闭,只需添加到构造函数的末尾即可

self.triggered.connect(self.close)

执行操作时关闭窗口(通过调用 close)

不幸的是,我不知道这是否是跨平台的或者是否具有优化含义。我邀请任何用户扩展这个答案。

© www.soinside.com 2019 - 2024. All rights reserved.