Qt自定义弹出式菜单(Qt自定义弹窗)

 需求:写一个自定义弹出菜单,

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

原文地址:https://www.cnblogs.com/SwiftChocolate/p/15600205.html