如何禁用 QDockWidget 标题栏的上下文菜单

How to disable the context menu of a QDockWidget title bar

我有几个 QDockWidgets,它们都不是 closabale(使用 Qt 5.6)。因此,当right-clicking其中一个标题栏只有禁用条目时显示的上下文菜单,我想禁用整个上下文菜单。

我尝试将 contextMenuPolicy 设置为 NoContextMenu 但没有成功。

然后我尝试使用 QDockWidget 的子类,覆盖 ContextMenuEvent 并忽略它。菜单仍然显示。

然后我尝试安装一个事件过滤器来捕捉 ContextMenuEvent,但它没有捕捉到任何事件,只有 PaintEvents、ResizeEvents 等。

我没有想法……任何帮助将不胜感激!

根据评论,有必要将 QDockWidget 上的上下文菜单策略设置为 Qt::PreventContextMenu...

dock_widget->setContextMenuPolicy(Qt::PreventContextMenu);

而不是简单地 Qt::NoContextMenu。从 documentation Qt::NoContextMenu 只是将上下文菜单处理推迟到父小部件,而不是完全阻止它。