17.QT右键菜单实现--Apple的学习笔记

一,前言

今天要刻意练习的是鼠标右键菜单。比如别人工具上某个地方右键则有不同的菜单弹出。若右键点击在table上也会读取些信息。

二,需求

实现鼠标右键功能。

三,遇到的问题

1. 如何让菜单在鼠标右击的时候显示
答:网上查了好几个方法,我用的方法是设置contextMenuPolicy为Qt::DefaultContextMenu,这个也是默认值。然后重写QWidget类的contextMenuEvent事件。
其它方法包括:
a.实现customContextMenuRequested信号的接口,并调用setContextMenuPolicy设置Qt::CustomContextMenu参数,使用connect链接。
b.重写父类的mousePressEvent函数,处理鼠标右键事件。
2.如何让menu在鼠标位置显示?
答:pMenuRight->exec(QCursor::pos())。编辑界面点击exec选F1后可以看到帮助,关于鼠标传递还有2种方式。
3. 如何判断鼠标位置是否包含某控件
答:方法是if(xxx->geometry().contains(this->mapFromGlobal(QCursor::pos()))),当然控件太多的话这样的方法就不适用了。或者将控件保存到控件list,通过扫描list来排除。

四,效果

就在之前的界面上再加一个右功能,但是我做完觉得有点不好,就是连按钮位置都可以有右键功能。控件过滤没有添加哦,将来有需要再加,反正解决方案已知。


image.png

五,小结

通过自己挖掘需求来进行刻意练习,我已经掌握了不少的技能了,好有成就感呢!我喜欢这样白手起家从头开始干的感觉~

你可能感兴趣的:(17.QT右键菜单实现--Apple的学习笔记)