Home > Software engineering >  Qt: DefaultContextMenu vs CustomContextMenu
Qt: DefaultContextMenu vs CustomContextMenu

Time:08-20

What's the difference between setting ContextMenuPolicy to DefaultContextMenu or CustomContextMenu? From what I can tell, they're the same things? Either way, you get to create a custom context menu if needed.

CodePudding user response:

They are certainly not the same.

While they both could create a custom menu, their behavior is quite different. Consider the QWidget documentation:

The default value of this property is Qt::DefaultContextMenu, which means the contextMenuEvent() handler is called.

This means that you need to specifically override contextMenuEvent() in order to eventually show the context menu. This usually means that subclassing is required and only the widget will handle that event (which could also be ignored) and possibly its menu.

Note that overriding contextMenuEvent() could be done also for special cases of the event management, from the simplest one (accepting it, to avoid propagation to the parent) to more complex situations that need to set up some aspects before letting the default implementation to handle the event as usual.

With Qt::CustomContextMenu, the signal customContextMenuRequested() is emitted.

This means that any object can connect to that signal (and potentially more than once), even a completely unrelated one, and eventually do something from there. This also means that there is absolutely no access to the event, which will always be considered as accepted.

  • Related