解决Qt工程UI内menuBar、mainToolBar、dockWidget右键上下文菜单无法关闭的问题

创建带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()

修改后,问题解决,右键不会出现空的上下文菜单,关闭成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值