需求:写一个自定义弹出菜单,
1、单击按钮时展现,单击空白处或再次单击按钮则隐藏
2、菜单内容可以是自定义的widget
3、可以自定义弹出菜单的方向
(可以参考用来实现至任意组件的下拉框)
解决思路:
由于要自定义弹出菜单的方向,而QToolButton的showMenu无法自定义弹出方向,所以一开始想到的方案是
1、QToolButton+独立的QMenu,QToolButton收到单击事件时调用QWidget的show;这样做会发现一个问题,尽管单击空白处可以隐藏弹窗,但是再次单击按钮的时候这个弹窗会又一次弹起(弹窗的隐藏总会先于单击事件的处理),无法满足要求1。
2、QToolButton+自定义QWidget的方案,单击空白隐藏不好控,且容易出现方案1的问题。
解决方案:
要求1可以通过QToolButton的showMenu满足(QToolButton+自定义QWidget的方案行不通);
要求2可以通过QWidgetAction满足;
要求3可以通过通过子类化QMenu,在showEvent中移到相应的位置满足;
github:Demo_QMenu