创建带UI的Qt工程时,.ui中会生成一个默认的menuBar和mainToolBar
程序运行时,在menuBar或mainToolBar区域内单击鼠标右键,会出现一个默认的上下文菜单,并且有一个空白的action(如果添加了dockWidget,也会出现这种情况)
点击该action,会发现mainToolBar被隐藏了,因此这个action正是默认的那个mainToolBar
有时不需要这些上下文菜单,空白的action也会造成误解和干扰,那么应该怎样隐藏它们呢?
ui.mainToolBar->setContextMenuPolicy(Qt::NoContextMenu);
ui.menuBar->setContextMenuPolicy(Qt::NoContextMenu);
设置Policy为NoContentMenu,无效果
有效解决方案:
1)设置相关对象的contextPolicy为CustomContextMenu
ui.mainToolBar->setContextMenuPolicy(Qt::CustomContextMenu);
ui.menuBar->setContextMenuPolicy(Qt::CustomContextMenu);
2)将customContextMenuRequested信号连接到一个空的槽函数
connect(ui.menuBar, &QMenuBar::customContextMenuRequested, this, [](){DoNothing();});
connect(ui.mainToolBar, &QToolBar::customContextMenuRequested, this, [](){DoNothing();});
注意:槽函数最好不要只写一个分号。《代码大全2》指出,可以定义一个名为DoNoting的宏,用来表示什么也不做
#define DoNothing()
修改后,问题解决,右键不会出现空的上下文菜单,关闭成功