问题描述
我们利用代码直接生成MainWindow
下的右键菜单栏(如何生成右键菜单?),但是发现由于textBrowser
控件定义了自有默认右键菜单,因此我们自定义的右键菜单失效。如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/5affce5a7cbd76d7437fe8e115d3ce7a.png)
解决办法
QWidget及其子类都可有右键菜单,首先设置QWidget与右键菜单有关的函数setContextMenuPolicy(),属性对应项为contextmenuPolicy。setContextMenuPolicy函数的参数为枚举类型Qt::ContextMenuPolicy,qt帮助文档中有相应介绍:
![](https://i-blog.csdnimg.cn/blog_migrate/1c6e3c0f21b226e885585cc65e3633e8.png)
接着我们进入UI编辑界面,点击需要设置的textBrowser
,其右侧属性栏中找到该参数,观察到该参数默认为DefaultContextMenu
,如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/054cfd6ca02536a9044d8b1216b655f0.png)
该值表示在未重写右键响应时,按照默认值输出,这也是显示默认菜单的原因。为避免复杂的重写,且全局只需要一个右键菜单栏的情况下,我们修改该指定控件该参数为ActionsContextMenu
,菜单只需正常创建即可,不需要对函数进行重写。同时,为保证在其他非指定位置不出现该右键菜单,将其他控件该参数设置为PreventContextMenu
即可。
最终得到正常的自定义右键菜单,如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/92623214a15227cc5364b69fc1edba74.png)
一些关于右键菜单重写的文章
Qt学习之给QPushButton添加菜单ActionsContextMenu方法
(四)Qt之右键菜单
Qt实现右键菜单的五种方法!(以QListWidget为例)
qt 右键菜单事件