我正在尝试实现一个“打开”按钮,这样如果用户按住它并按住它,就会弹出一个供用户选择的应用程序菜单;但是一旦用户释放鼠标,菜单就会消失。如果用户在未选择菜单上的应用程序的情况下释放鼠标,则应使用默认应用程序打开文件。我将此按钮实现为 aQToolButton
并按如下方式连接信号:
self.ui_open_btn.pressed.connect(self._onOpenBtnPressed)
self.ui_open_btn.triggered.connect(self._onOpenBtnTriggered)
def _onOpenBtnPressed(self):
self.ui_open_btn.showMenu()
def _onOpenBtnTriggered(self, action):
application_name = action.text()
# code to launch the application
现在,当用户按下按钮时,将弹出菜单。但是,当用户释放按钮时,菜单仍然存在,并且通过单击它会触发菜单上的操作。DelayedPopup
我在和InstantPopup
模式下都试过了。只要菜单设置为self.ui_open_btn
,我就无法再捕捉到任何released
信号。用户释放鼠标时如何隐藏菜单?如何通过释放鼠标来触发菜单上的动作?
- 添加 - -
我发现了另一个关于使用的问题QToolButton
:按下按钮时菜单总是弹出。相反,我想捕捉pressed
信号,做一些检查以确定菜单是否应该弹出。所以我改变了我的方法,通过子类化QPushButton
和QMenu
. 请参阅我在下面的答案中提出的代码。
谢谢。