如何防止自定义QToolBar被自动添加到右键上下文菜单中
自定义QToolBar禁止出现在主窗口上下文菜单的实现方案
问题根因
你看到的右键菜单并非自定义工具栏自身的上下文菜单,而是QMainWindow默认提供的工具栏/停靠控件显隐控制菜单,会自动枚举所有已添加到主窗口的工具栏生成对应选项,因此给工具栏单独设置setContextMenuPolicy(QtCore.Qt.NoContextMenu)不会生效。
最优解决方案
不需要禁用主窗口全部上下文菜单,只需要在自定义工具栏的初始化逻辑中,将其自动生成的切换显隐动作设为不可见即可,该动作就是主窗口上下文菜单中对应条目的来源:
在CustomToolBar的__init__方法中添加如下代码:
self.toggleViewAction().setVisible(False)
修改后的完整CustomToolBar代码如下:
class CustomToolBar(QtWidgets.QToolBar): def __init__(self, parent=None): super().__init__(parent=parent) if parent: self.setParent(parent) self.parent().addToolBar(QtCore.Qt.BottomToolBarArea, self) self.setObjectName('Custom ToolBar') # 隐藏工具栏对应的切换显隐动作,避免出现在主窗口上下文菜单 self.toggleViewAction().setVisible(False) # 该配置仅控制工具栏自身的上下文菜单,可按需保留 self.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
其他可选方案
如果你不需要主窗口自带的任何默认上下文菜单,也可以直接给主窗口设置禁用上下文菜单策略,在MainWindow的__init__方法中添加:
self.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
该方案会完全屏蔽主窗口的默认上下文菜单,适合全自定义菜单交互的场景。
内容的提问来源于stack exchange,提问作者Lorem Ipsum
相关产品推荐
相关产品推荐

